【发布时间】:2012-04-19 15:25:55
【问题描述】:
我有一个包含 3 个数组声明的 C++ 代码。
float A[NUM];
float B[NUM];
float C[NUM];
当我使用NUM=512 编译时,编译速度很快
time g++ -DNUM=512 trials trials.cpp -lm
0.16s 用户 0.04s 系统 94% cpu 0.219 总
但是,当我使用NUM=167772160 编译时,需要更多时间。
time g++ -DNUM=167772160 trials trials.cpp -lm
7.90s 用户 0.69s 系统 99% cpu 8.604 总
我已经好几年没用过 C++了。我很想知道为什么编译后的目标文件大小相同,但编译时会存在时间差异。
【问题讨论】:
-
那些数组是静态数据吗?
-
它们是全局声明。
-
谁知道 g++ 试图做什么优化。也许它会分配这样一个数组来检查以警告无效的内存访问。尝试使用 -O0 再次运行基准测试(可能多次运行)并分别进行编译和链接。
-
可能与此错误或其中提到的错误有关:gcc.gnu.org/bugzilla/show_bug.cgi?id=20923您使用的 gcc 版本是什么?
-
标准(C 和 C++)要求将全局变量/静态变量初始化为 0。现在,GCC 通常将此类数据放在 .bss 部分中。您可以执行以下操作:1) 检查 .bss 部分的值和 2) 查看汇编器输出。尝试将
-fno-zero-initialized-in-bss选项传递给编译器,看看是否有什么不同。