g ++编译时间是否依赖于数组大小?

时间:2012-04-05 21:24:29

标签: c++ g++

我有一个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 ++了。我很想知道为什么编译时存在时间差,尽管编译后的目标文件大小相同。

2 个答案:

答案 0 :(得分:10)

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

请参阅: Linker performance related to swap space?

  

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

也相关:

答案 1 :(得分:0)

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