C ++:编译全局数组的时间

时间:2018-06-07 17:18:19

标签: c++ arrays compilation global-variables

使用g ++ 4.2.1编译,只是这个非常简单的代码,为什么这个代码

eg1 <- list(
  list("12345"),
  list("12340"),
  list("12300"),
  list("12000"),
  list("10000")
  )
eg2 <- list(
  list("1234", list("12345", "12340")),
  list("1230", list("12300")),
  list("1200", list("12000")),
  list("1000", list("10000"))
  )
eg3a <- list(
  list("123", list("1234", list("12345", "12340"), "1230", list("12300"))),
  list("120", list("1200", list("12000"))),
  list("100", list("1000", list("10000")))
  )
eg3b <- list(
  list("123", list("1234", "1230", list("12345", "12340", "12300"))),
  list("120", list("1200", list("12000"))),
  list("100", list("1000", list("10000")))
)
str(eg1)
#> List of 5
#>  $ :List of 1
#>   ..$ : chr "12345"
#>  $ :List of 1
#>   ..$ : chr "12340"
#>  $ :List of 1
#>   ..$ : chr "12300"
#>  $ :List of 1
#>   ..$ : chr "12000"
#>  $ :List of 1
#>   ..$ : chr "10000"
str(eg2)
#> List of 4
#>  $ :List of 2
#>   ..$ : chr "1234"
#>   ..$ :List of 2
#>   .. ..$ : chr "12345"
#>   .. ..$ : chr "12340"
#>  $ :List of 2
#>   ..$ : chr "1230"
#>   ..$ :List of 1
#>   .. ..$ : chr "12300"
#>  $ :List of 2
#>   ..$ : chr "1200"
#>   ..$ :List of 1
#>   .. ..$ : chr "12000"
#>  $ :List of 2
#>   ..$ : chr "1000"
#>   ..$ :List of 1
#>   .. ..$ : chr "10000"
str(eg3a)
#> List of 3
#>  $ :List of 2
#>   ..$ : chr "123"
#>   ..$ :List of 4
#>   .. ..$ : chr "1234"
#>   .. ..$ :List of 2
#>   .. .. ..$ : chr "12345"
#>   .. .. ..$ : chr "12340"
#>   .. ..$ : chr "1230"
#>   .. ..$ :List of 1
#>   .. .. ..$ : chr "12300"
#>  $ :List of 2
#>   ..$ : chr "120"
#>   ..$ :List of 2
#>   .. ..$ : chr "1200"
#>   .. ..$ :List of 1
#>   .. .. ..$ : chr "12000"
#>  $ :List of 2
#>   ..$ : chr "100"
#>   ..$ :List of 2
#>   .. ..$ : chr "1000"
#>   .. ..$ :List of 1
#>   .. .. ..$ : chr "10000"
str(eg3b)
#> List of 3
#>  $ :List of 2
#>   ..$ : chr "123"
#>   ..$ :List of 3
#>   .. ..$ : chr "1234"
#>   .. ..$ : chr "1230"
#>   .. ..$ :List of 3
#>   .. .. ..$ : chr "12345"
#>   .. .. ..$ : chr "12340"
#>   .. .. ..$ : chr "12300"
#>  $ :List of 2
#>   ..$ : chr "120"
#>   ..$ :List of 2
#>   .. ..$ : chr "1200"
#>   .. ..$ :List of 1
#>   .. .. ..$ : chr "12000"
#>  $ :List of 2
#>   ..$ : chr "100"
#>   ..$ :List of 2
#>   .. ..$ : chr "1000"
#>   .. ..$ :List of 1
#>   .. .. ..$ : chr "10000"

比这个

需要更长的时间来编译
int a[1000000000] = {0};

int main()
{
    return 0;
}

如果在C ++中,在编译期间没有构造数组?

而且,我看到了这段代码:

int a[10] = {0};

int main()
{
    return 0;
}

(没有= {0})不需要很长时间来编译,就像int a [10] = {0}

那么快

2 个答案:

答案 0 :(得分:0)

声明:

C:\Users\etomb\Desktop\workfucker.txtC:\Users\etomb\Desktop\workfucker.txtC:\Users\etomb\Desktop\workfucker.txtC:\Users\etomb\Desktop\workfucker.txt

编译需要比

更长的时间
int a[100000000] = {0};

因为要解析的字符更多。

但是,编译时间应该可以忽略不计。

如果编译器创建的数据段全部为0而不是使用初始化循环,则可能需要更多时间。

声明:

int a[10] = {0};

编译的速度比前面的语句快,因为编译器不必发出代码或数据来初始化数组。

答案 1 :(得分:0)

你的证据在哪里?详细信息在哪里(如您使用的编译器)?您是否只使用此代码或此代码?你做了多少次来确定这个?

要得到答案:唯一可以忽略的性能差异在于解析代码 - 因为int a[100000000] = {0};示例中会有更多符号。

查看生成的程序集将提供如何分配变量的答案:gcc -c -S main.c

        .file   "main.c"  
        .globl  a                                                                                                                                                                                              
        .bss                                                                                                                                                                                                   
        .align 32                                                                                                                                                                                              
        .type   a, @object                                                                                                                                                                                     
        .size   a, 4000000000                                                                                                                                                                                  
a:                                                                                                                                                                                                             
        .zero   4000000000                                                                                                                                                                                     
        .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    $0, %eax                                                                                                                                                                                       
        popq    %rbp                                                                                                                                                                                           
        .cfi_def_cfa 7, 8                                                                                                                                                                                      
        ret                                                                                                                                                                                                    
        .cfi_endproc                                                                                                                                                                                           
.LFE0:                                                                                                                                                                                                         
        .size   main, .-main                                                                                                                                                                                   
        .ident  "GCC: (GNU) 7.2.1 20170915 (Red Hat 7.2.1-2)"                                                                                                                                                  
        .section        .note.GNU-stack,"",@progbits  

AND:

        .file   "main.c"                                                                                                                                                                                       
        .globl  a                                                                                                                                                                                              
        .bss                                                                                                                                                                                                   
        .align 32                                                                                                                                                                                              
        .type   a, @object                                                                                                                                                                                     
        .size   a, 40                                                                                                                                                                                                
a:                                                                                                                                                                                                             
        .zero   40                                                                                                                                                                                             
        .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    $0, %eax                                                                                                                                                                                       
        popq    %rbp                                                                                                                                                                                           
        .cfi_def_cfa 7, 8                                                                                                                                                                                      
        ret                                                                                                                                                                                                    
        .cfi_endproc                                                                                                                                                                                           
.LFE0:                                                                                                                                                                                                         
        .size   main, .-main                                                                                                                                                                                   
        .ident  "GCC: (GNU) 7.2.1 20170915 (Red Hat 7.2.1-2)"                                                                                                                                                  
        .section        .note.GNU-stack,"",@progbits