Golang内存对齐

Golang内存对齐

简介

  • CPU 始终以字长访问内存,

对齐保证(align guarantee)

  • 结构体的成员变量,第一个成员变量的偏移量为 0。

  • 往后的每个成员变量的对齐值必须为编译器默认对齐长度#pragma pack(n))或当前成员变量类型的长度unsafe.Sizeof),取最小值作为当前类型的对齐值。其偏移量必须为对齐值的整数倍

  • 结构体本身,对齐值必须为编译器默认对齐长度#pragma pack(n))或结构体的所有成员变量类型中的最大长度

  • 最大数的最小整数倍作为对齐值;

  • 结合以上两点,可得知若编译器默认对齐长度#pragma pack(n))超过结构体内成员变量的类型最大长度时,

  • 默认对齐长度是没有任何意义的;

参考

  1. https://geektutu.com/post/hpg-struct-alignment.html

  2. 1.5 在 Go 中恰到好处的内存对齐 - 跟煎鱼学 Go

  3. http://blog.newbmiao.com/2020/02/10/dig101-golang-struct-memory-align.html

updatedupdated2024-04-282024-04-28