一个关于C++编译的问题

其实这两种情况下,Windows上编译出的文件大小都是不一样的。
在默认初始化的情况下,这个静态变量的空间是预留的,即PE文件中不会有同样大小的一段数据,而是标记出大小,由程序启动时再从内存上分配。
但如果你给了非0的初始化,这段数据就会被实打实地写到PE文件里。假设这里数组的占用空间是1M,那么生成的文件就会大1M。
所以大概率你的卡顿是编译器写磁盘导致的。

换个好点的硬盘吧(逃

■网友
【一个关于C++编译的问题】 我觉得可以有两种方式解决这个问题:
方式一:定义固定大小的数组,不给初始值。分别进行初始化。这样的数组好像是占用DATA段。
int a;a = 1;a = 1;方式二:用指针在程序运行后动态分配内存,再初始化。也就是使用堆中的内存。
int * a;a = (int *)malloc(sizeof(int)*100000);a = 1;a = 1;

■网友
我复现了问题....这两个程序的差异其实是很大的.如果效果不明显,可以把数组长度尽量扩大,会明显一点(至于为啥我也不知道....)
给出两个可能有用的参考信息
bss ,data的差异一位不认识的网友的blogstackoverflow 上面一个关于memory allocated at compile time
#我的环境uname -a-\u0026gt; Linux spinach-latitude5480 5.6.19-2-MANJARO #1 SMP PREEMPT Wed Jun 17 22:24:52 UTC 2020 x86_64 GNU/Linuxg++ --version-\u0026gt; g++ (GCC) 10.1.0一个关于C++编译的问题

复现效果一个关于C++编译的问题

加入-O2的优化选项后仍然有明显差异学习C语言的时候,有个常识是全局变量可能在bss或者data段,我认为问题出在这里.(参考资料link)我尝试使用-S选项生成汇编进行对比(vimdiff),发现两个程序的区别.

一个关于C++编译的问题

至于这是什么意思,以及为什么它影响了编译时间,我就不清楚了.

■网友
因为相当于它多帮你加了。int* _a = a;++ _a;*_a = 1;++ _a;*_a = 0;++ _a;*_a = 0;++ _a;*_a = 0;...好多好多个++ _a;*_a = 0;不过也可能受编译优化的影响生成其他的形式。
■网友
贴下完整代码看看?所用操作系统版本,编译器版本?所谓编译的快和慢分别是多少时间?


    推荐阅读