Go 语言类型特性深度解析
1. 结构体字段对齐
在 Java 中,我们无法确切知晓类字段在内存中的布局顺序,因为 JIT 编译器可以自行选择任意顺序。而在 Go 语言里,结构体字段通常会按照声明的顺序在内存中布局。每种类型都有其自身的对齐需求,一般是依据该类型所占的字节数,以 16 字节为边界进行对齐。
为了优化内存使用,最好将较大的字段放在前面。否则,结构体内部可能会出现间隙以重新建立对齐。我们可以使用特定大小的空白字段(名称为 “_”)来强制对齐。例如:
type Xxx struct {
i1 int64
b int8
_ [3]byte // add 3 bytes
i2 int16
_ [2]byte // add 2 bytes
i3 int32
}
结构体字段的对齐情况如下表所示:
| 类型 | 大小(字节) |
| — | — |
| byte, uint8, int8, bool | 1 |
| uint16, int16 | 2 |
| uint32, int32, float32, rune | 4 |
| uint64, int64, float64, complex64 | 8 |
| complex128 | 16 |
| int, uint | 4 或 8(取决于机器架构) |
| * | 4 或 8(取决于机器架构) |
大多数现代计算机采用 64 位(8 字节)字长,所以 int、uint
超级会员免费看
订阅专栏 解锁全文
82

被折叠的 条评论
为什么被折叠?



