¿Dónde se almacenan las variables local, global, estática, auto, registro, extern, const, volátil?¿Dónde se almacenan las variables locales, globales, estáticas, automáticas, de registro, externas, const y volátiles?
Respuesta
variables locales se pueden almacenar ya sea en la pila o en un segmento de datos dependiendo de si son auto o estática. (Si no se especifica de forma explícita ni automático o estático, se supone automático)
variables globales se almacenan en un segmento de datos (a menos que el compilador puede optimizar a la basura, consulte const) y tienen la visibilidad desde el punto de declaración de el final de la unidad de compilación.
variables estáticas se almacenan en un segmento de datos (de nuevo, a menos que el compilador puede optimizar a la basura) y tienen visibilidad desde el punto de la declaración al final del ámbito de encerramiento. Las variables globales que no son estáticas también son visibles en otras unidades de compilación (ver extern).
auto Las variables son siempre locales y se almacenan en la pila.
El modificador le dice al compilador que haga todo lo posible para mantener la variable en un registro si es posible. De lo contrario, se almacena en la pila.
extern variables se almacenan en el segmento de datos. El modificador externo le dice al compilador que una unidad de compilación diferente está declarando realmente la variable, por lo que no cree otra instancia de la misma o habrá una colisión de nombre en el tiempo del enlace.
const Las variables se pueden almacenar en la pila o en un segmento de datos de solo lectura, en función de si son automáticas o estáticas. Sin embargo, si el compilador puede determinar que no se puede hacer referencia a ellos desde una unidad de compilación diferente, o que su código no usa la dirección de la variable const, es libre de optimizarla (cada referencia puede ser reemplazada por el valor constante) . En ese caso, no está almacenado en ningún lado.
la volátil modificador indica al compilador que el valor de una variable puede cambiar en cualquier momento a partir de las influencias externas (por lo general de hardware) por lo que no se debe tratar de optimizar la basura cualquier recargas de memoria en un registro cuando se hace referencia a esa variable . Esto implica almacenamiento estático.
Por cierto todo esto se aplica a C & C++, así como Objective-C.
Las variables locales generalmente se almacenan en la pila, y las variables globales en el segmento de "texto" de un programa (en el caso de constantes de cadena) o en el montón si están dinámicamente asignadas. Las variables automáticas se usan generalmente en funciones/métodos, y generalmente se pasan en la pila (a veces en registros, también, dependiendo de la arquitectura). Las variables de registro se almacenaron una vez en registros, pero la mayoría de los compiladores ignoran actualmente la palabra clave register y la colocan donde lo consideren apropiado: en la pila o en un registro. Los miembros externos, const y volátiles son modificadores y, por lo tanto, no tienen un lugar definitivo donde se almacenan.
Por lo tanto, la respuesta breve es, como de costumbre, "depende".
Las variables locales y auto
se almacenan en la pila. Las variables globales y static
se almacenan en una página de DATOS. register
las variables se almacenan en un registro en la CPU si es posible, de lo contrario en la pila. extern
, const
y volatile
no especifican dónde se almacena la variable; la variable se almacena donde los demás especificadores de almacenamiento dicen que están.
los segmentos de texto son normalmente de solo lectura. Las variables globales estarán en un segmento de datos. – JeremyP
@JeremyP: Estás en lo correcto, un pequeño mindslip allí. –
¿A qué nivel de abstracción está buscando una respuesta?
En el nivel físico, probablemente todos estén almacenados en capacidades de compuerta y dominios magnéticos. (Tal vez incluso los fotones si su disco de intercambio está conectado wifi o fibra óptica)
En un nivel de hardware, las copias de cualquiera y todas estas variables pueden existir en varios lugares del registro, caché de datos (quizás en niveles múltiples) , memoria principal y/o jerarquía de almacenamiento, desde completamente intercambiado a un disco o almacenamiento NV (dependiendo de la existencia, implementación y estado actual de cualquier subsistema de memoria virtual con paginación demandada), hasta quizás todo en registros si el tamaño de sus aplicaciones y la vida es lo suficientemente pequeña.
Dadas las implementaciones más habituales del compilador y el tiempo de ejecución, la memoria (quizás virtual) se divide en elementos llamados pilas y montones. Dada la definición formal del lenguaje, este corte puede o no ser necesario.
En el nivel de optimización del compilador, muchas de estas variables pueden haberse optimizado para que no existan. No están almacenados en ningún lugar excepto como una abstracción.
+100 Desearía poder votar tan a menudo como sea necesario para que esta sea la respuesta más votada :) – pmg
Me gusta más la abstracción. –
LOCAL- Variables locales con qué alcance se encuentra en la función. Puede haber dos tipos auto o estáticos. Si se declara simplemente int var.Compiler tratar como clase de almacenamiento automático. Las variables automáticas se almacenan en Pila. Las variables estáticas se almacenan en el segmento de datos.
Las variables de registro se almacenan en la CPU. Si no hay registros disponibles para almacenar variables, entonces el compilador trata como variable automática.
Las variables globales se almacenan en el área Segmento de datos.
Las variables const se almacenan en el área de solo lectura. Es el área del segmento de código de memeory.
- 1. variables estáticas locales y globales en C++
- 2. ¿Dónde se almacenan las variables locales finales de Java?
- 3. ¿Dónde se almacenan las variables locales de .NET?
- 4. variables globales estáticas y externas en C y C++
- 5. ¿Dónde se almacenan las variables de entorno en el registro?
- 6. ¿Cómo se definen las variables estáticas locales locales de subprocesos?
- 7. Cómo | ¿Dónde se almacenan las variables cerradas?
- 8. Imprimir todas las variables globales/variables locales?
- 9. ¿Dónde se almacenan las variables constantes en C?
- 10. ¿En qué objeto se almacenan las variables globales de Javascript?
- 11. ¿Dónde se almacenan las macros?
- 12. ASP.NET C# Las variables estáticas son globales?
- 13. ¿Cuándo se inicializan las variables de const estático globales?
- 14. Linux: ¿dónde se almacenan las variables de entorno?
- 15. Las variables estáticas en C y C++
- 16. ¿Dónde debo declarar las variables estáticas?
- 17. ¿Puedo liberar() variables estáticas y automáticas en C?
- 18. ¿Las variables locales en métodos estáticos también son estáticas?
- 19. ¿Dónde se almacenan las compras de InAPP?
- 20. ¿Las variables locales en Fortran 77 son estáticas o dinámicas?
- 21. ¿Dónde se almacenan las propiedades. Configuración predeterminada?
- 22. Variables locales estáticas para métodos en Ruby?
- 23. Locales de contexto: ¿cómo hacen que las variables de contexto locales sean globales?
- 24. ¿Dónde se almacenan las preferencias compartidas?
- 25. ¿Las declaraciones de funciones locales se almacenan en caché?
- 26. Las variables locales tardan 7 veces más en acceder que las variables globales?
- 27. ¿Dónde y cómo se almacenan las contraseñas en Magento?
- 28. acceso todas las variables locales
- 29. ¿Por qué las variables locales también se llaman "Automáticas" en Java?
- 30. Dónde poner las variables globales en Rails 3
En la memoria ...? – BoltClock