图 3-13 函数调用参数布局
ioworker0 opened this issue · 2 comments
ioworker0 commented
提示:哪一章节的问题,建议如何修改
local 顺序画反了,local 0应该比local 1 地址要大,位置应该在上。
cch123 commented
@chai2010 ,这里是不是确实有点问题
(dlv) n
> main.main() ./local.go:6 (PC: 0x105817f)
1: package main
2:
3: func main() {
4: var a = 1
5: var b = 2
=> 6: println(a, b)
7: }
(dlv) p &a
(*int)(0xc000034748)
(dlv) p &b
(*int)(0xc000034740)
(dlv)
chai2010 commented
local0和local1是什么顺序,其实和语言实现有关,怎么排列甚至优化成常量都可以。文中的类比是让大家更好理解,展示的是一种和参数布局一样规则的可能的实现。因为参数先出现的是小地址,而参数也是类似局部变量的,可以类比出局部变量先出现的也是小地址(当然,这个结论不成立)。
读者能发现这个问题,说明在思考底层实现的细节,这是很赞的。我只给一个建议,在通过看汇编理解了实现的细节后,需要反思为何要这样实现,是否可以不这样实现,实现和设计有何关系等问题。
感谢指出,这个本来就不是严格的结论,因此书中说的比较模糊,这是刻意的。
我们要以一种最低的规则,拟合出一种可能的并易于理解的实现原理。