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

mut*_*gan 9 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

但是,当我编译时 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

我多年没用过C++了.我很想知道为什么编译时存在时间差,尽管编译后的目标文件大小相同.

seh*_*ehe 10

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

请参阅: 与交换空间相关的链接器性能?

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

还有关系: