Выделение памяти для глобальных и локальных переменных

Я узнал, что память для глобальных переменных выделяется при запуске программы, тогда как память для локальных переменных выделяется всякий раз, когда выполняется вызов функции.

Случай 1:
Я объявил глобальный целочисленный массив размером 63500000, а используемая память составляет 256 МБ
. Ссылка на идею

include 
int a[63500000];
int main()
{
    printf ("This code requires about 250 MB memory\n");
    return 0;
}

Случай 2:
Я объявил локальный целочисленный массив того же размера в main (), а используемая память составляет 1,6 МБ
. Идеальная ссылка

#include 
int main()
{
    int a[63500000]= {1,5,0};
    printf ("This code requires only 1.6 MB \n");
    //printf ("%d\n", a[0]);
    return 0;
}

Случай 3:
Я объявил локальный целочисленный массив того же размера в другой функции, и используемая память составляет 1,6 МБ
Идеоне Ссылка

#include 
void f()
{
    int a[63500000];
}

int main()
{
    f();
    return 0;
}

Пожалуйста, объясните, почему существует разница в используемой памяти или моя концепция распределения памяти неверна??

10
задан Snehasish 15 August 2012 в 21:13
поделиться