如果 gcc 在 extern 块中有一个大数组,为什么 gcc 需要很长时间来编译 C 代码?
#define MAXNITEMS 100000000
int buff[MAXNITEMS];
int main (int argc, char *argv[])
{
return 0;
}
如果 gcc 在 extern 块中有一个大数组,为什么 gcc 需要很长时间来编译 C 代码?
#define MAXNITEMS 100000000
int buff[MAXNITEMS];
int main (int argc, char *argv[])
{
return 0;
}
我怀疑某处有错误。无论数组有多大,编译都没有理由花费更长的时间,因为编译器只会将整数写入.bss
段,因为您从未为其中的元素分配值。证明:
.file "big.c"
.comm buff,4000000000000000000,32
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl %edi, -4(%rbp)
movq %rsi, -16(%rbp)
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3"
.section .note.GNU-stack,"",@progbits
如您所见,程序集中数组中唯一剩下的就是.comm buff,4000000000000000000,32
.
我建议你用 gcc-S
来查看汇编代码。也许您的 GCC 版本有错误。我使用 GCC 4.7.3 进行了测试,无论我使用哪个值,这里的编译时间都是相同的。