gpt4 book ai didi

go - len() 运行了多少次?

转载 作者:IT王子 更新时间:2023-10-29 01:07:16 24 4
gpt4 key购买 nike

len(p) 会运行多少次?只有一个和结果会被保存,还是每次迭代都会运行?

func main() {
p := []int{2, 3, 5, 7, 11, 13}
for i:=0;i<len(p);i++ {}
}

最佳答案

slice 上的

len() 由编译器优化,就像访问局部变量一样。这不是真正的函数调用。

您可以通过以下方式验证:

$ cat x.gopackage mainimport "fmt"func main() {    a := []int{1,2, 3}    fmt.Println(len(a))}

然后查看编译器输出:

$ go tool 6g -S x.go

--- prog list "main" ---0000 (x.go:3) TEXT    main+0(SB),$128-00001 (x.go:4) MOVQ    $0,autotmp_0002+-80(SP)0002 (x.go:4) MOVQ    $0,autotmp_0002+-72(SP)0003 (x.go:4) MOVQ    $0,autotmp_0002+-64(SP)0004 (x.go:4) LEAQ    autotmp_0002+-80(SP),BX0005 (x.go:4) MOVQ    BX,autotmp_0001+-56(SP)0006 (x.go:4) MOVQ    autotmp_0001+-56(SP),BX0007 (x.go:4) MOVQ    statictmp_0000+0(SB),BP0008 (x.go:4) MOVQ    BP,(BX)0009 (x.go:4) MOVQ    statictmp_0000+8(SB),BP0010 (x.go:4) MOVQ    BP,8(BX)0011 (x.go:4) MOVQ    statictmp_0000+16(SB),BP0012 (x.go:4) MOVQ    BP,16(BX)0013 (x.go:4) MOVQ    autotmp_0001+-56(SP),BX0014 (x.go:4) MOVQ    $3,CX0015 (x.go:5) LEAQ    autotmp_0005+-16(SP),DI0016 (x.go:5) MOVQ    $0,AX0017 (x.go:5) STOSQ   ,0018 (x.go:5) STOSQ   ,0019 (x.go:5) LEAQ    autotmp_0005+-16(SP),BX0020 (x.go:5) MOVQ    BX,autotmp_0004+-48(SP)0021 (x.go:5) MOVQ    autotmp_0004+-48(SP),BX0022 (x.go:5) MOVQ    $1,SI0023 (x.go:5) MOVQ    $1,DX0024 (x.go:5) MOVQ    BX,autotmp_0003+-40(SP)0025 (x.go:5) MOVQ    autotmp_0003+-40(SP),BX0026 (x.go:5) MOVQ    $type.int+0(SB),AX0027 (x.go:5) MOVQ    AX,(BX)0028 (x.go:5) MOVQ    CX,8(BX)0029 (x.go:5) MOVQ    autotmp_0003+-40(SP),BX0030 (x.go:5) MOVQ    BX,(SP)0031 (x.go:5) MOVQ    SI,8(SP)0032 (x.go:5) MOVQ    DX,16(SP)0033 (x.go:5) CALL    ,fmt.Println+0(SB)0034 (x.go:6) RET     ,

注意 fmt.Println 的调用,但没有调用 len

关于go - len() 运行了多少次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14662438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com