这是Linux上的gcc 4.4.6。
这是行为
bizarre.c
double a[500000000];
main() {
}
如果我使用以下方法编译:
gcc bizarre.c
然后编译器使用4G内存,需要很长时间。
如果我将数组大小设置为50000000,则编译所需的内存和时间会少得多。
就像编译器正在执行它正在编译的代码一样。
我意识到以这种方式创建一个巨大的阵列可能不是最好的做法,而是任何解释?
答案 0 :(得分:6)
这是一个与--build-id相关的已知链接器错误,现在已在主线上修复。请参阅http://sourceware.org/bugzilla/show_bug.cgi?id=12451有些发行版采用了早期的Nick补丁,不必要地计算了.bss的校验和,要求分配和归零.bss部分。抱怨你的发行版。