结构体对齐规则总结
1、结构体对齐规则
关于结构体对齐上,总结大致有两个规则需要遵守
规则1:偏移量对齐
简单来说,偏移量即为该元素与地址起始点的差值。
成员的对齐值为该成员大小和系统对齐值中的最小值,在32位系统中,系统对齐值为4,64位系统中则为8,同时也可通过#pragma pack(n):设置n字节对齐。成员起始地址的偏移量必须是对齐值的整数倍。
举个例子(假设64位系统)
1 | struct Demo{ |
该结构体中:
- 成员i的对齐值为min{1,8} = 1,偏移量为0
- 成员x的对齐值为min{4,8} = 4,偏移量需为4的整数倍,即为4,所以成员x为4到7
- 成员y的对齐值为8,偏移量需为8的整数倍,即为8,地址为8-15
综上所述,他占用字节为16。
规则2:结构体总大小对齐
结构体占用的字节数一定为最大成员对齐值的整数倍。
2、指针
- 一级指针
- 二级指针
- 函数指针
(未完待续…)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 我的自救学习!