在 extern 块中使用大数组时编译时间较长

问题描述 投票:0回答:1

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

#define MAXNITEMS   100000000

int buff[MAXNITEMS];
int main (int argc, char *argv[])
{
   return 0;
}
c
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 版本有 bug。我使用 GCC 4.7.3 进行了测试,无论我使用哪个值,这里的编译时间都是相同的。

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

© www.soinside.com 2019 - 2024. All rights reserved.