使用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}
那么快答案 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