今天终于琢磨明白一个问题,拿出来跟大伙分享下。
我的测试程序如下:
#include "stdafx.h"
char Buff[1024*1024*4] = {0};
int main()
{
return 0;
}
,这段代码经过编译之后,大约184K(debug)。
如果把全局变量Buff赋初始值改改,char Buff[1024*1024*4] = {1};
经过编译之后大约是4.98M,差了20多倍。
经过上网学习,发现,原来全局变量赋初始值为0,那么全局变量会被存储在可执行文件的bbs段里,而且全局变量被优化压缩;如果全局变量赋初始值为1(非0值),那么全局变量就存储在可执行文件的data段里,不被压缩。
就这点差异,导致可执行文件大小居然增加好几M。如果全局变量定义的更大,那么可执行文件就变的更大,例如,把这个全局变量定义为40M大小,那么可执行文件大小是48M。
如果全局变量的大小超过256M,那么VC编译时编译器会报错的,“warning LNK4084: total image size 279367680 exceeds max (268435456); image may not run”。
编程多年,一直没注意这块,哈哈。现在总算学明白这点啦。