visual variable una son qué que locales las inicializar hay globales estaticas entre ejemplos diferencia declaracion como c variables global local

una - ¿Por qué las variables globales siempre se inicializan a ''0'', pero no a las variables locales?



variables globales y locales en visual basic (4)

Posible duplicado:
¿Por qué las variables globales y estáticas se inicializan a sus valores predeterminados?

Ver el código,

#include <stdio.h> int a; int main(void) { int i; printf("%d %d/n", a, i); }

Salida

0 8683508

Aquí ''a'' se inicializa con ''0'', pero ''i'' se inicializa con ''valor basura''. ¿Por qué?


Has elegido variables simples, pero considera:

void matrix_manipulation(void) { int matrix1[100][100]; int matrix2[100][100]; int matrix3[100][100]; /* code to read values for matrix1 from a file */ /* code to read values for matrix2 from a file */ /* code to multiply matrix1 by matrix2 storing the result in matrix3 */ /* code to use matrix3 somehow */ }

Si el sistema inicializó las matrices en 0, el esfuerzo se desperdiciaría; la inicialización es sobrescrita por el resto de la función. C evita los costos ocultos siempre que sea posible.


Las variables globales se asignan e inicializan antes de que comience la función main , mientras que las variables locales se generan en la pila a medida que se ejecuta la instancia del programa.


Porque así son las cosas, de acuerdo con el estándar C. La razón de eso es la eficiencia:

  • las variables estáticas se inicializan en tiempo de compilación , ya que su dirección es conocida y está fija. Inicializarlos en 0 no implica un costo de tiempo de ejecución.

  • las variables automáticas pueden tener diferentes direcciones para diferentes llamadas y deberían inicializarse en tiempo de ejecución cada vez que se llame a la función, incurriendo en un costo en tiempo de ejecución que puede no ser necesario. Si necesita esa inicialización, solicítela.


global variables global y static se almacenan en el segmento de datos (DS) cuando se inicializan y bloquean el inicio por el símbolo (BSS) `cuando no se inicializan.

Estas variables tienen una ubicación de memoria fija, y la memoria se asigna en tiempo de compilación.

Por lo tanto, global variables global y static tienen ''0'' como sus valores predeterminados.

Mientras que auto variables auto se almacenan en la pila, y no tienen una ubicación de memoria fija.

La memoria se asigna a variables auto en tiempo de ejecución, pero no en tiempo de compilación. Por lo tanto, auto variables auto tienen su valor predeterminado como basura.