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

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

3个回答

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

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

u010319440
星星89757 也就是说,这2M的变量所需的空间在栈上,是运行时候系统分配给进程的,不是使用代码段,不占代码空间
4 年多之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐