Golang内存对齐
简介
- CPU 始终以字长访问内存,
对齐保证(align guarantee)
结构体的成员变量,第一个成员变量的偏移量为 0。
往后的每个成员变量的对齐值必须为编译器默认对齐长度(
#pragma pack(n)
)或当前成员变量类型的长度(unsafe.Sizeof
),取最小值作为当前类型的对齐值。其偏移量必须为对齐值的整数倍结构体本身,对齐值必须为编译器默认对齐长度(
#pragma pack(n)
)或结构体的所有成员变量类型中的最大长度,取最大数的最小整数倍作为对齐值;
结合以上两点,可得知若编译器默认对齐长度(
#pragma pack(n)
)超过结构体内成员变量的类型最大长度时,默认对齐长度是没有任何意义的;