0

如果 gcc 在 extern 块中有一个大数组,为什么 gcc 需要很长时间来编译 C 代码?

#define MAXNITEMS   100000000

int buff[MAXNITEMS];
int main (int argc, char *argv[])
{
   return 0;
}
4

1 回答 1

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 进行了测试,无论我使用哪个值,这里的编译时间都是相同的。

相关:静态变量存储在哪里(在 C/C++ 中)?

于 2013-10-03T08:56:17.130 回答