9

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

4

2 回答 2

10

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

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

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

还有相关的:

于 2012-04-05T21:40:05.727 回答
0

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

于 2012-04-07T01:29:25.130 回答