Я узнал, что память для глобальных переменных выделяется при запуске программы, тогда как память для локальных переменных выделяется всякий раз, когда выполняется вызов функции.
  Случай 1: 
Я объявила глобальный целочисленный массив размером 63500000, а используемая память - 256 МБ 
Идеальная ссылка
include <stdio.h>
int a[63500000];
int main()
{
    printf ("This code requires about 250 MB memory\n");
    return 0;
}
  Случай 2: 
Я объявил локальный целочисленный массив одинакового размера в main(), а используемая память - 1,6 МБ 
Идеальная ссылка
#include <stdio.h>
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 <stdio.h>
void f()
{
    int a[63500000];
}
int main()
{
    f();
    return 0;
}
Пожалуйста, объясните, почему разница в используемой памяти или неправильная концепция распределения памяти?