为什么需要内存对齐

系统的cpu不是一个字节一个字节访问内存的,是按2,4,8这样的字长来访问的。(N 位系统的字长是 N/8 字节)

总结

  • 内存对齐是为了让 cpu 更高效访问内存中数据
  • struct 的对齐是:如果类型 t 的对齐保证是 n,那么类型 t 的每个值的地址在运行时必须是 n 的倍数。即 uintptr(unsafe.Pointer(&x)) % unsafe.Alignof(x) == 0
  • struct 内字段如果填充过多,可以尝试重排,使字段排列更紧密,减少内存浪费
  • 零大小字段要避免作为 struct 最后一个字段,会有内存浪费
  • 32 位系统上对 64 位字的原子访问要保证其是 8bytes 对齐的;当然如果不必要的话,还是用加锁(mutex)的方式更清晰简单