gcc编译时间和内存使用情况随源代码中的数组大小的变化而变化

Ala*_*lan 5 gcc

这是Linux上的gcc 4.4.6.

这是行为

bizarre.c

double a[500000000];

main() {
}
Run Code Online (Sandbox Code Playgroud)

如果我使用以下方法编译:

gcc bizarre.c
Run Code Online (Sandbox Code Playgroud)

然后编译器使用4G内存,并且需要很长时间.

如果我将数组大小设置为50000000,则编译所需的内存和时间会少得多.

这就像编译器正在执行它正在编译的代码.

我意识到以这种方式创建一个巨大的阵列可能不是最佳实践,但任何解释?

小智 6

这是与--build-id相关的已知链接器错误,现在已在主线上修复.请参阅 http://sourceware.org/bugzilla/show_bug.cgi?id=12451 有些发行版采用了早期的Nick补丁,不必要地计算了.bss的校验和,要求分配和归零.bss部分.抱怨你的发行版.