这是 Linux 上的 gcc 4.4.6。
这是行为
奇异的.c
double a[500000000];
main() {
}
如果我使用以下方法编译它:
gcc bizarre.c
然后编译器用了4G的内存,而且耗时比较长。
如果我将数组大小设为 50000000,则编译所需的内存和时间会大大减少。
就像编译器正在执行它正在编译的代码一样。
我意识到以这种方式创建一个巨大的数组可能不是最佳实践,但有什么解释吗?
这是 Linux 上的 gcc 4.4.6。
这是行为
奇异的.c
double a[500000000];
main() {
}
如果我使用以下方法编译它:
gcc bizarre.c
然后编译器用了4G的内存,而且耗时比较长。
如果我将数组大小设为 50000000,则编译所需的内存和时间会大大减少。
就像编译器正在执行它正在编译的代码一样。
我意识到以这种方式创建一个巨大的数组可能不是最佳实践,但有什么解释吗?
这是一个与 --build-id 相关的已知链接器错误,现已在主线修复。请参阅 http://sourceware.org/bugzilla/show_bug.cgi?id=12451 一些发行版采用了 Nick 的早期补丁,该补丁不必要地计算了 .bss 上的校验和,需要分配 .bss 部分并将其归零。向您的发行版投诉。