From 2b536bf31b41c8938c8d39f443507a68512bdb74 Mon Sep 17 00:00:00 2001 From: han <409911942@QQ.COM> Date: Sun, 26 Aug 2018 22:55:13 +0800 Subject: [PATCH] fix-ch3-04-func-typo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 这里先定义的局部变量应该是c --- ch3-asm/ch3-04-func.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch3-asm/ch3-04-func.md b/ch3-asm/ch3-04-func.md index 5eea2e6..c9350f7 100644 --- a/ch3-asm/ch3-04-func.md +++ b/ch3-asm/ch3-04-func.md @@ -189,7 +189,7 @@ TEXT ·Foo(SB), $32-0 RET ``` -Foo函数有3个局部变量,但是没有调用其它的函数,因为对齐和填充的问题导致函数的栈帧大小为32个字节。因为Foo函数没有参数和返回值,因此参数和返回值大小为0个字节,当然这个部分可以省略不写。而局部变量中先定义的变量c离伪SP寄存器对应的地址最远,最后定义的变量a离伪SP寄存器最近。有两个因素导致出现这种逆序的结果:一个从Go语言函数角度理解,先定义的a变量地址要比后定义的变量的地址更小;另一个是伪SP寄存器对应栈帧的底部,而X86中栈是从高向地生长的,所以最先定义有着更小地址的c变量离栈的底部伪SP更远。 +Foo函数有3个局部变量,但是没有调用其它的函数,因为对齐和填充的问题导致函数的栈帧大小为32个字节。因为Foo函数没有参数和返回值,因此参数和返回值大小为0个字节,当然这个部分可以省略不写。而局部变量中先定义的变量c离伪SP寄存器对应的地址最远,最后定义的变量a离伪SP寄存器最近。有两个因素导致出现这种逆序的结果:一个从Go语言函数角度理解,先定义的c变量地址要比后定义的变量的地址更小;另一个是伪SP寄存器对应栈帧的底部,而X86中栈是从高向地生长的,所以最先定义有着更小地址的c变量离栈的底部伪SP更远。 我们同样可以通过结构体来模拟局部变量的布局: