问题描述
- 在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事?
-
在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事?
解决方案
全局变量是运行时操作系统分配的,分配在堆上,不是分配在静态区,所以不会影响exe的大小。
解决方案二:
你的全局变量没有初始化数据吧?如果你有2M大小的数据,就不一样了。
比如,
char a[2*1024*1024] = {0,1,2,3,4..........};
char b[2*1024*1024];
在链接器中,a是已初始化数据,b是未初始化数据。已初始化数据需要占用exe空间,未初始化数据就不需要了。
解决方案三:
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。
时间: 2024-12-02 12:03:47