结构体定义及结构体粒度(alignment)

结构体定义及结构体粒度(alignment)

#pragma pack(1)
typedef struct _STUDENT_INFORMATION_
{
    int Age;
    char v1;
    int v3;
    char v2;
}STUDENT_INFORMATION;

结构体的成员对齐值:

  • 结构体中当前数据成员类型的长度为M,指定的对齐值为N,实际对齐值为q = min(M, N)
  • 结构体中的数据成员,除了第一个是始终放在最开始的地方,其它数据成员的地址必须是它本身大小或对齐参数两者中较小的一个的倍数

对齐值对结构体整体大小的影响:

  • 如果结构体中的数据成员类型最大值为M,指定的对齐值为N,实际对齐值就是min(M, N)
  • 结构体大小必须能被对齐值整除

注意
1)当结构体中以数组作为成员时,计算对齐值是根据数组元素的长度,而不是数组的整体大小

2)当结构体中出现结构体类型的数据成员时,不会将嵌套的结构体类型的整体长度加入对齐值计算中,而是以嵌套定义的结构体使用的对齐值进行对齐

额外知识点

pragma pack(1)意为按一个字节对齐

pragma pack()即取消自定义对齐方式

若前面没有pragma pack 结构体里面内容定义应按字节数从大到小或从小到大

原文链接: https://www.cnblogs.com/XiuzhuKirakira/p/17052514.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    结构体定义及结构体粒度(alignment)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/383679

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月8日 下午6:28
下一篇 2023年3月8日 下午6:30

相关推荐