Junior
¿Cuándo y cuánto tiempo existen las variables globales y locales en C++?
sobes.tech AI
Respuesta de la IA
Variables globales
- Tiempo de existencia: Desde el inicio del programa hasta su finalización.
- Lugar de almacenamiento: Normalmente en el área de memoria estática (.data o sección .bss del archivo ejecutable).
- Inicialización:
- Las variables globales no estáticas, definidas a nivel de archivo, con constructores no triviales, se inicializan antes de la llamada a
main(). - Las variables globales con inicialización a cero (por ejemplo, int i = 0;) también se inicializan antes de
main(). - Las variables definidas con
consto con duración de almacenamiento estático se inicializan al cargar el programa.
- Las variables globales no estáticas, definidas a nivel de archivo, con constructores no triviales, se inicializan antes de la llamada a
- Disponibilidad: Son visibles en todas las funciones dentro del ámbito.
Variables locales
- Tiempo de existencia: Desde la definición de la variable dentro de un bloque de código (función, ciclo, condicional, etc.) hasta la salida de ese bloque.
- Lugar de almacenamiento: Normalmente en la pila (para variables automáticas). Las variables locales estáticas se almacenan en el área de memoria estática.
- Inicialización:
- Las variables locales automáticas no se inicializan por defecto (contienen "basura"). Requieren inicialización explícita.
- Las variables locales estáticas se inicializan una vez en su primera declaración.
- Disponibilidad: Solo son visibles dentro del bloque de código donde se definen.
Ejemplos
// Variable global
int global_variable = 10;
void some_function() {
// Variable local (automática)
int local_variable_1; // No inicializada
// Variable local (automática) con inicialización
int local_variable_2 = 20;
// Variable local estática
static int static_local_variable = 30; // Se inicializa una vez
// Acceso a la variable global
global_variable++;
// Acceso a variables locales
local_variable_1 = global_variable;
static_local_variable++;
// Después de salir de some_function(), local_variable_1 y local_variable_2 dejan de existir
// static_local_variable continúa existiendo, conservando su valor
}
int main() {
some_function();
some_function(); // static_local_variable ha conservado su valor
// La variable global está disponible aquí
// local_variable_1 y local_variable_2 no están accesibles
return 0;
}
Tabla comparativa
| Característica | Variables globales | Variables locales (automáticas) | Variables locales estáticas |
|---|---|---|---|
| Tiempo de existencia | Desde el inicio hasta la finalización del programa | Desde la definición hasta la salida del bloque de código | Desde la primera declaración hasta la finalización del programa |
| Lugar de almacenamiento | Área de memoria estática (.data, .bss) | Pila | Área de memoria estática (.data, .bss) |
| Inicialización | Antes de llamar a main() o al cargar el programa |
No se inicializan por defecto. Requieren inicialización explícita | Una vez en la primera declaración |
| Disponibilidad | En todo el ámbito del archivo | Solo dentro del bloque de código | Solo dentro del bloque de código |