2 hytlok hytlok 于 2016.04.04 21:57 提问

在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事?

在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事?

3个回答

gcfang123
gcfang123   2016.04.05 10:25
已采纳

你的全局变量没有初始化数据吧?如果你有2M大小的数据,就不一样了。
比如,
char a[2*1024*1024] = {0,1,2,3,4..........};
char b[2*1024*1024];
在链接器中,a是已初始化数据,b是未初始化数据。已初始化数据需要占用exe空间,未初始化数据就不需要了。

caozhy
caozhy   Ds   Rxr 2016.04.04 23:22

全局变量是运行时操作系统分配的,分配在堆上,不是分配在静态区,所以不会影响exe的大小。

u010319440
u010319440   2016.04.04 22:19

栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。

u010319440
u010319440 也就是说,这2M的变量所需的空间在栈上,是运行时候系统分配给进程的,不是使用代码段,不占代码空间
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!