g++ 编译时间是否取决于数组大小

Does g++ compilation time depend on array size?

本文关键字:数组 取决于 是否 编译 时间 g++      更新时间:2023-10-16

我有一个C++代码,它有 3 个数组声明。

float A[NUM]; float B[NUM]; float C[NUM];

当我用NUM=512编译时,编译速度很快

time g++ -DNUM=512 trials trials.cpp -lm

0.16s user 0.04s system 94% cpu 0.219 total

但是,当我使用 NUM=167772160 编译时,需要更多时间。

time g++ -DNUM=167772160 trials trials.cpp -lm

7.90s user 0.69s system 99% cpu 8.604 total

我已经很多年没有使用C++了。我很想知道为什么编译时会有时差,尽管编译后的目标文件大小相同。

这是一个众所周知的难题。在此过程中的某个地方,将分配数组的实际内存

看:与交换空间相关的链接器性能?

看起来,正如我们可能怀疑的那样,看起来 ld 实际上正在尝试匿名映射这个数组的整个静态内存空间(或者可能是整个程序,很难说,因为程序的其余部分太小了,它可能都适合额外的 4096)。

还相关:

  • 静态分配程序编译时间长
  • 奇怪的海湾合作委员会行为
  • GC 中缺少优化:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=4131

您的数组是在本地声明还是全局声明?如果是全局的,因为链接器应该在 .data 部分中分配内存,这可能需要很长时间。但是,如果在本地声明它,因为内存是在运行时分配的,而不是在链接时分配的。这将是链接器的问题,而是由编译器的分析器或优化器引起的问题。