グローバル変数のメモリはプログラムの起動時に割り当てられるのに対し、ローカル変数のメモリは関数呼び出しが行われるたびに割り当てられることを学びました。
ケース1:
サイズ63500000のグローバル整数配列を宣言しました。使用されているメモリは256MBです
。IdeoneLink
include <stdio.h>
int a[63500000];
int main()
{
printf ("This code requires about 250 MB memory\n");
return 0;
}
ケース2:
main()で同じサイズのローカル整数配列を宣言し、使用されるメモリは1.6MBの
Ideoneリンクです
#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.6MBです
。IdeoneLink
#include <stdio.h>
void f()
{
int a[63500000];
}
int main()
{
f();
return 0;
}
使用するメモリに違いがあるのか、メモリ割り当ての概念が間違っているのか説明してください。