mirror of
https://github.com/chai2010/advanced-go-programming-book.git
synced 2025-05-24 12:32:21 +00:00
ch3: fix typo
This commit is contained in:
parent
79c1474bd1
commit
927ccf36a0
@ -28,8 +28,6 @@ $ go tool compile -S pkg.go
|
||||
|
||||
其中`go tool compile`命令用于调用Go语言提供的底层命令工具,其中`-S`参数表示输出汇编格式。输出的汇编比较简单,其中`"".Id`对应Id变量符号,变量的内存大小为8个字节。变量的初始化内容为`37 25 00 00 00 00 00 00`,对应十六进制格式的0x2537,对应十进制为9527。SNOPTRDATA是相关的标志,其中NOPTR表示数据中不包含指针数据。
|
||||
|
||||
暂时可以忽略。
|
||||
|
||||
以上的内容只是目标文件对应的汇编,和Go汇编语言虽然相似当并不完全等价。Go语言官网自带了一个Go汇编语言的入门教程,地址在:https://golang.org/doc/asm 。
|
||||
|
||||
Go汇编语言提供了DATA命令用于初始化包变量,DATA命令的语法如下:
|
||||
@ -156,7 +154,7 @@ DATA ·Name+8(SB)/8,$6
|
||||
```go
|
||||
package main
|
||||
|
||||
import pkg "pkg包的路径"
|
||||
import pkg "path/to/pkg"
|
||||
|
||||
func main() {
|
||||
println(pkg.Name)
|
||||
|
@ -104,7 +104,7 @@ TEXT ·Swap(SB), $0
|
||||
func Foo(a bool, b int16) (c []byte)
|
||||
```
|
||||
|
||||
函数的参数有不同的类型,同时含有多个返回值,而且返回值中含有更复杂的接口类型。我们该如何计算每个参数的位置和总的大小呢?
|
||||
函数的参数有不同的类型,而且返回值中含有更复杂的切片类型。我们该如何计算每个参数的位置和总的大小呢?
|
||||
|
||||
其实函数参数和返回值的大小以及对齐问题和结构体的大小和成员对齐问题是一致的。我们可以用诡代思路将全部的参数和返回值以同样的顺序放到一个结构体中,将FP伪寄存器作为唯一的一个指针参数,而每个成员的地址也就是对应原来参数的地址。
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user