1.go 和 2.go 汇编后与ppt不太一致怎么评估哪个快
来源:1-6 Go 语法背后的秘密
啭地滴猫
2021-05-21 09:13:45
谢大,曹大,助教好,麻烦看下,下面是汇编后的情况
哪个代码效率比较高我认为是不是汇编代码行数比较少的效率高,为什么要这样,ppt说的是一样的,我的环境是在mac下的go版本是
go1.14.12 darwin/amd64
1回答
我在 mac 上得到的结果也是一样,不确定你那里是不是环境还是什么有问题:
git:master ❯❯❯ cat -n 1.go
1 package main
2
3 type person struct {
4 age int
5 }
6
7 func main() {
8 var a = &person{111}
9 println(a)
10 }
git:master ❯❯❯ cat -n 2.go
1 package main
2
3 type person struct {
4 age int
5 }
6
7 func main() {
8 var b = person{111}
9 var a = &b
10 println(a)
11 }
git:master ❯❯❯ go tool objdump 1 | grep -A 20 "main.main"
TEXT main.main(SB) /Users/xargin/test/fuc/1.go
1.go:7 0x1051570 65488b0c2530000000 MOVQ GS:0x30, CX
1.go:7 0x1051579 483b6110 CMPQ 0x10(CX), SP
1.go:7 0x105157d 7647 JBE 0x10515c6
1.go:7 0x105157f 4883ec18 SUBQ $0x18, SP
1.go:7 0x1051583 48896c2410 MOVQ BP, 0x10(SP)
1.go:7 0x1051588 488d6c2410 LEAQ 0x10(SP), BP
1.go:8 0x105158d 48c744240800000000 MOVQ $0x0, 0x8(SP)
1.go:8 0x1051596 48c74424086f000000 MOVQ $0x6f, 0x8(SP)
1.go:9 0x105159f e81c3afdff CALL runtime.printlock(SB)
1.go:9 0x10515a4 488d442408 LEAQ 0x8(SP), AX
1.go:9 0x10515a9 48890424 MOVQ AX, 0(SP)
1.go:9 0x10515ad e80e43fdff CALL runtime.printpointer(SB)
1.go:9 0x10515b2 e8993cfdff CALL runtime.printnl(SB)
1.go:9 0x10515b7 e8843afdff CALL runtime.printunlock(SB)
1.go:10 0x10515bc 488b6c2410 MOVQ 0x10(SP), BP
1.go:10 0x10515c1 4883c418 ADDQ $0x18, SP
1.go:10 0x10515c5 c3 RET
1.go:7 0x10515c6 e83581ffff CALL runtime.morestack_noctxt(SB)
1.go:7 0x10515cb eba3 JMP main.main(SB)
❯❯❯ go tool objdump 2 | grep -A 20 "main.main"
TEXT main.main(SB) /Users/xargin/test/fuc/2.go
2.go:7 0x1057390 65488b0c2530000000 MOVQ GS:0x30, CX
2.go:7 0x1057399 483b6110 CMPQ 0x10(CX), SP
2.go:7 0x105739d 7647 JBE 0x10573e6
2.go:7 0x105739f 4883ec18 SUBQ $0x18, SP
2.go:7 0x10573a3 48896c2410 MOVQ BP, 0x10(SP)
2.go:7 0x10573a8 488d6c2410 LEAQ 0x10(SP), BP
2.go:8 0x10573ad 48c744240800000000 MOVQ $0x0, 0x8(SP)
2.go:8 0x10573b6 48c74424086f000000 MOVQ $0x6f, 0x8(SP)
2.go:10 0x10573bf e86c33fdff CALL runtime.printlock(SB)
2.go:10 0x10573c4 488d442408 LEAQ 0x8(SP), AX
2.go:10 0x10573c9 48890424 MOVQ AX, 0(SP)
2.go:10 0x10573cd e85e3cfdff CALL runtime.printpointer(SB)
2.go:10 0x10573d2 e8e935fdff CALL runtime.printnl(SB)
2.go:10 0x10573d7 e8d433fdff CALL runtime.printunlock(SB)
2.go:11 0x10573dc 488b6c2410 MOVQ 0x10(SP), BP
2.go:11 0x10573e1 4883c418 ADDQ $0x18, SP
2.go:11 0x10573e5 c3 RET
2.go:7 0x10573e6 e8259dffff CALL runtime.morestack_noctxt(SB)
2.go:7 0x10573eb eba3 JMP main.main(SB)
git:master ❯❯❯ go version
go version go1.14.12 darwin/amd64
相似问题
回答 1
回答 1