5

这是 Linux 上的 gcc 4.4.6。

这是行为

奇异的.c

double a[500000000];

main() {
}

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

gcc bizarre.c

然后编译器用了4G的内存,而且耗时比较长。

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

就像编译器正在执行它正在编译的代码一样。

我意识到以这种方式创建一个巨大的数组可能不是最佳实践,但有什么解释吗?

4

1 回答 1

6

这是一个与 --build-id 相关的已知链接器错误,现已在主线修复。请参阅 http://sourceware.org/bugzilla/show_bug.cgi?id=12451 一些发行版采用了 Nick 的早期补丁,该补丁不必要地计算了 .bss 上的校验和,需要分配 .bss 部分并将其归零。向您的发行版投诉。

于 2012-06-15T04:41:12.060 回答