一个关于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
复现效果
加入-O2的优化选项后仍然有明显差异学习C语言的时候,有个常识是全局变量可能在bss或者data段,我认为问题出在这里.(参考资料link)我尝试使用-S选项生成汇编进行对比(vimdiff),发现两个程序的区别.
至于这是什么意思,以及为什么它影响了编译时间,我就不清楚了.
■网友
因为相当于它多帮你加了。int* _a = a;++ _a;*_a = 1;++ _a;*_a = 0;++ _a;*_a = 0;++ _a;*_a = 0;...好多好多个++ _a;*_a = 0;不过也可能受编译优化的影响生成其他的形式。
■网友
贴下完整代码看看?所用操作系统版本,编译器版本?所谓编译的快和慢分别是多少时间?
推荐阅读
- 同比■同比增长7.1%!2021年的第一个节你花了多少钱?
- “他是我第一个会说普通话的老师”:一对师生折射青海山村蝶变
- 过节■江苏省委省政府办公厅下发关于做好2021年元旦春节期间有关工作的通知
- 有必要重新开个C店吗
- 大学再有三个月就结束了,没学到知识,参加一个软件测试培训机构好吗
- 汽车|长安UNI-K又将开创一个新的"引力"纪元?
- 神话|武汉传奇父亲:一个平行班孩子创造的高考神话(感动上万家长)
- 王者荣耀李白能不能出肉
- 直播会成为品牌传播的另一个途径么有哪些可行的方法感觉有戏又没头绪好捉急。
- 怎样成为一名合格的Python程序员?