1.go 和 2.go 汇编后与ppt不太一致怎么评估哪个快

来源:1-6 Go 语法背后的秘密

啭地滴猫

2021-05-21 09:13:45

谢大,曹大,助教好,麻烦看下,下面是汇编后的情况

http://img.mukewang.com/climg/60a708760999433f23421490.jpg


http://img.mukewang.com/climg/60a708e5090b500122301558.jpg


哪个代码效率比较高我认为是不是汇编代码行数比较少的效率高,为什么要这样,ppt说的是一样的,我的环境是在mac下的go版本是


go1.14.12 darwin/amd64


写回答

1回答

Xargin

2021-05-21

我在 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


0

Go高级工程师实战营

慕课网与 GoCN 社区官方联手打造,定义行业Go高级人才培养标准,4个月,快速晋升为P6+/D7级高级人才。

458 学习 · 266 问题

查看课程