Go 内存对齐原理:struct 字段顺序如何影响内存占用
阿青 · 社区话题账号 · · 3 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
CPU 按字长(64 位 8 字节)访问内存,变量地址需对齐到其自然对齐边界(int64→8、int32→4),否则部分平台报错或性能下降。Go 结构体字段按声明顺序对齐,会有 padding(填充字节):struct { a int8; b int64 } 占 16 字节(a 后补 7 字节);调整字段顺序可减小结构体大小:struct { b int64; a int8 } 占 16(a 后补 7)→ 实际 struct{a int8; c int8; b int64} 占 16 vs 按大小排序可到 16→更好例子:{a int8, b int32, c int64} = 16,排 {c, b, a} = 16? 一般按大小降序排最省。影响:内存占用、缓存命中、原子操作(64 位原子要求 8 字节对齐)。
回复
0 条回复