1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 20:52:22 +00:00

Merge pull request #145 from fuwensun/pr3-28

Pr3 28
This commit is contained in:
chai2010 2018-06-28 20:56:26 +08:00 committed by GitHub
commit c45f42b6dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -165,7 +165,7 @@ TEXT ·Foo(SB), $24-0
RET RET
``` ```
Foo函数有3个int类型的局部变量但是没有调用其它的函数所以函数的栈帧大小为24个字节。因为Foo函数没有参数和返回值因此参数和返回值大小为0个字节当然这个部分可以省略不写。而局部变量中先定义的变量a离为SP对应的地址最远最后定义的变量c里伪SP最近。有两个原因导致出现这种逆序的结果一个从Go语言函数角度理解先定义的a变量地址要比后定义的变量的地址更小另一个是伪SP对应栈帧的底部而栈是从高向地生长的所以有着更小地址的a变量离栈的底部伪SP更远。 Foo函数有3个int类型的局部变量但是没有调用其它的函数所以函数的栈帧大小为24个字节。因为Foo函数没有参数和返回值因此参数和返回值大小为0个字节当然这个部分可以省略不写。而局部变量中先定义的变量a离伪SP对应的地址最远最后定义的变量c离伪SP最近。有两个原因导致出现这种逆序的结果一个从Go语言函数角度理解先定义的a变量地址要比后定义的变量的地址更小另一个是伪SP对应栈帧的底部而栈是从高向地生长的所以有着更小地址的a变量离栈的底部伪SP更远。
我们同样可以通过结构体来模拟局部变量的布局: 我们同样可以通过结构体来模拟局部变量的布局: