2012-03-24 28 views
10

Podría alguien decir, en general, lo que ocurre a lo (disco duro, memoria RAM, pila o montón) en tiempo de ejecución en C++ para estos casos:¿Qué va a RAM, Harddrive, Stack y Heap en C++?

  • /variables globales locales

  • clases, métodos y funciones

  • Punteros

  • Objetos

¿Y Stack/Heap está ubicado en la RAM física?

Agradecería que alguien pudiera incluir la analogía de hardware en la respuesta. Gracias.

+0

huelo tarea o preparación de la prueba :) Todo eso es OK, siempre y cuando la cuestión está etiquetado apropiadamente. – dasblinkenlight

+4

No mezcle * lenguajes de programación * y * hardware informático *. El primero es un idioma, el último se rompe cuando lo dejas caer al suelo. Los lenguajes de programación se pueden usar para * instruir * una computadora, pero son ante todo una construcción abstracta. –

+0

@Kerrek SB: Si pudiera decir, ¿dónde instruye C++ a la computadora para que los coloque al final? – Maiss

Respuesta

13

Esto es por lo general depende de OS, pero por lo general es así:

Todo va a RAM. El binario reside en el disco duro, pero, cuando se ejecuta, está completamente cargado, junto con las bibliotecas dependientes, en la RAM.

La pila y el montón son detalles de implementación, pero también residen en la RAM.

Aunque está cargado en la RAM, la memoria no se puede direccionar directamente. El sistema operativo asigna memoria virtual para cada proceso. Esto significa que la dirección 0x001 no se encuentra realmente en 0x001 en la RAM, pero representa una dirección en el espacio de direcciones virtuales.

EDIT: Aclaración a uno de los comentarios de OP:

Están binarios cargados total o parcialmente en tiempo de ejecución? Y, ¿esos binarios solo se acceden una vez durante el tiempo de ejecución o se continúan leyendo desde Harddrive?

Por ejemplo, en MS, si enlaza con una biblioteca, se cargará completamente en el tiempo de ejecución, al inicio del programa. Si lo carga programáticamente, a través del LoadLibrary(), se carga en la memoria en la llamada a la función, y puede descargarse de la memoria.

+4

Todo va a la memoria virtual, que no siempre está en la RAM ... –

+0

@GuySirton Lo especifiqué, pero lo más habitual es que sea RAM. –

+0

Creo que su punto es que las partes de la memoria virtual, es decir, las páginas, se pueden y se intercambiarán en el disco. – delnan

7

Todos ellos entran en la memoria. Ahora, la definición de "en memoria" depende del sistema operativo, las opciones del compilador y el enlazador, el formato ejecutable y un millón de otros factores.

En muchos sistemas operativos modernos, cuando se crea un proceso, el archivo ejecutable se mapea en la memoria (esto significa que una región de memoria se reservó para el ejecutable pero no significa que el archivo ejecutable se haya cargado en esa ubicación).

Algunos sistemas operativos cargarán partes del archivo ejecutable a medida que se acceda (consulte "carga de retraso"), que es más común para bibliotecas cargadas dinámicamente (DLL en Windows y objetos compartidos en sistemas tipo UNIX). Esto influye principalmente en la "ubicación" actual de las funciones, ya sea "en disco" como el archivo ejecutable o "en la memoria" si esa parte del ejecutable se ha mapeado.

Las variables y todos los demás datos del programa van a la memoria. Sin embargo, cualquier sistema operativo que opere con memoria virtual puede cambiar el estado de ejecución de su programa (incluyendo la pila y el montón) al disco según su conveniencia, y luego restaurarlo nuevamente para seguir ejecutando su programa.

En conclusión, todos los elementos en su lista (variables, funciones, etc.) están en la memoria, aunque entonces no pueden almacenarse en "RAM física" en todo momento.

0

En C++, cuando guarda un programa, va al disco duro, cuando comienza a compilar y ejecuta el programa va a la memoria principal (RAM). Toda la memoria Stack y Heap son parte de la memoria RAM.

de acuerdo con la declaración de la variable en el programa y la llamada de función que la memoria está asignada. el tamaño predeterminado de la pila es de 2 MB (desde el principio) y almacena toda la variable local de su programa.

montón contiene todos los datos, que se crean durante el tiempo de ejecución, los medios a través de cualquiera malloc o new