【发布时间】:2012-08-12 05:18:39
【问题描述】:
我了解到全局变量的内存是在程序启动时分配的,而局部变量的内存是在函数调用时分配的。
案例 1:
我声明了一个大小为 63500000 的全局整数数组,使用的内存为 256 MB
Ideone Link
include <stdio.h>
int a[63500000];
int main()
{
printf ("This code requires about 250 MB memory\n");
return 0;
}
案例 2:
我在 main() 中声明了一个相同大小的本地整数数组,使用的内存为 1.6 MB
Ideone link
#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 MB
Ideone Link
#include <stdio.h>
void f()
{
int a[63500000];
}
int main()
{
f();
return 0;
}
请解释为什么使用的内存有差异或者我的内存分配概念是错误的??
【问题讨论】:
-
您知道,您应该直接在答案中发布代码,而不是提供 Ideone 链接
-
您如何知道这是程序消耗的内存量?
-
在您的本地数组示例中,您实际上并未使用大部分数组,因此编译器可以安全地对其进行优化。
-
@ArjunShankar 先生,每当我们在 ideone 中编译程序时,它都会显示程序所需的时间和使用的内存。
-
@nos - 谢谢。我现在明白了。
标签: c memory-management