¿Dónde se almacenan las variables locales, globales, estáticas, automáticas, de registro, externas, constantes y volátiles?

5 minutos de lectura

¿Donde se almacenan las variables locales globales estaticas automaticas de
Matriz

¿Dónde se almacenan las variables locales, globales, estáticas, automáticas, de registro, externas, constantes y volátiles?

  • ¿En la memoria…?

    – BoltClock

    10 de septiembre de 2010 a las 12:59

¿Donde se almacenan las variables locales globales estaticas automaticas de
Ferruccio

  • local las variables se pueden almacenar en la pila o en un segmento de datos dependiendo de si son automáticas o estáticas. (si no se especifica explícitamente ni auto ni static, se asume auto)

  • global las variables se almacenan en un segmento de datos (a menos que el compilador pueda optimizarlas, ver const) y tienen visibilidad desde el punto de declaración hasta el final de la unidad de compilación.

  • estático las variables se almacenan en un segmento de datos (nuevamente, a menos que el compilador pueda optimizarlas) y tienen visibilidad desde el punto de declaración hasta el final del alcance adjunto. 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.

  • los Registrarse 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.

  • externo Las variables se almacenan en el segmento de datos. El modificador externo le dice al compilador que una unidad de compilación diferente está declarando la variable, así que no cree otra instancia de la misma o habrá una colisión de nombres en el momento del enlace.

  • constante las variables se pueden almacenar en la pila o en un segmento de datos de solo lectura, dependiendo 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 está usando la dirección de la variable const, es libre de optimizarla (cada referencia puede ser reemplazada por el valor constante) . En ese caso no se almacena en ningún lado.

  • los volátil El modificador le dice al compilador que el valor de una variable puede cambiar en cualquier momento debido a influencias externas (generalmente hardware), por lo que no debe intentar optimizar ninguna recarga de la memoria en un registro cuando se hace referencia a esa variable. Esto implica almacenamiento estático.

Por cierto, todo esto se aplica a C y C ++, así como a Objective-C.

  • Por “segmento de texto” te refieres a “segmento de datos”, excepto cuando se habla de constantes.

    – JeremyP

    10 de septiembre de 2010 a las 13:58

  • ¡Genial! +1 por la brillante respuesta. ¡Será más perfecto si menciona la memoria del montón y el puntero en este contexto!

    – Arun Chettoor

    10 de enero de 2015 a las 11:48

1646757310 594 ¿Donde se almacenan las variables locales globales estaticas automaticas de
pata caliente2

¿A qué nivel de abstracción estás buscando una respuesta?

A nivel físico, probablemente todos estén almacenados en capacitancias de puerta y dominios magnéticos. (Tal vez incluso fotones si su disco de intercambio está conectado a wifi o fibra óptica).

En un nivel de hardware, pueden existir copias de todas y cada una de estas variables en varios lugares del registro, caché de datos (quizás en múltiples niveles), memoria principal y/o jerarquía de almacenamiento, todo, desde completamente intercambiado hasta almacenamiento en disco o NV (dependiendo de la existencia, la implementación y el estado actual de cualquier subsistema de memoria virtual paginado por demanda), hasta tal vez todo en los registros si el tamaño y la vida útil de sus aplicaciones son lo suficientemente pequeños.

Dadas las implementaciones de tiempo de ejecución y compilador más familiares, la memoria (quizás virtual) se divide en elementos llamados pilas y montones. Dada la definición del lenguaje formal, este corte puede o no ser necesario.

En el nivel de optimización del compilador, muchas de estas variables pueden haber sido optimizadas hasta desaparecer. No se almacenan 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

    10 de septiembre de 2010 a las 18:07

  • Me gusta más la parte de abstracción.

    – Praveen S.

    11 de septiembre de 2010 a las 6:54

1646757311 503 ¿Donde se almacenan las variables locales globales estaticas automaticas de
Ignacio Vázquez-Abrams

locales y auto Las variables se almacenan en la pila. globales y static las variables 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, consty volatile no especifique dónde se almacena la variable; la variable se almacena donde los otros especificadores de almacenamiento dicen que están.

  • los segmentos de texto normalmente son de sólo lectura. Las variables globales estarán en un segmento de datos.

    – JeremyP

    10 de septiembre de 2010 a las 13:59

1646757311 922 ¿Donde se almacenan las variables locales globales estaticas automaticas de
mipadi

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 las constantes de cadena) o en el montón si se asignan dinámicamente. Las variables automáticas generalmente se usan en funciones/métodos, y generalmente se pasan a la pila (a veces también en registros, dependiendo de la arquitectura). Las variables de registro alguna vez se almacenaron en registros, pero la mayoría de los compiladores hoy en día ignoran la palabra clave de registro y las colocan donde mejor les parezca: en la pila o en un registro. Los miembros extern, const y volatile son modificadores y, por lo tanto, no tienen un lugar definitivo donde almacenarlos.

Así que la respuesta corta es, como siempre, “depende”.

LOCAL- Variables locales cuyo alcance está dentro de la función. Puede ser de dos tipos, automático o estático. Si se declara simplemente int var.Compiler, trátelo como una clase de almacenamiento automático. Las variables automáticas se almacenan en Stack. 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, el compilador las trata como variables automáticas.

Las variables globales se almacenan en el área de segmento de datos.

Las variables constantes se almacenan en el área de solo lectura. Esa es el área de segmento de código de la memoria.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad