结构体有字节对齐和字节补齐问题

来源:互联网 发布:python 开源运维工具 编辑:程序博客网 时间:2024/05/12 13:27
关于结构体有一个字节对齐和字节补齐的问题
对齐原则是:分配空间要是该类型数据大小的倍数即为有char为1的倍数,有short为2的倍数,
有int为4的倍数,有double为8的倍数(关于int和double一般都是4的倍数)
补齐原则是:整个结构体变量的长度补成这里面最大的那个成员大小的倍数,如果大小超过4
就按4的倍数
所以你这个结构的大小具体要这样算
C/C++ code
?
1
2
3
4
5
6
7
struct s1
{
   int a;//此时是4
   char b;//此时是5
   short c;//对齐一下直接冲6开始,此时是8
   char d;//此时是9,补齐3个字节最后为12
};

a是个整形4个字节没啥说的,继续到b是个字符型1个字节4是1的倍数所以不用使用对齐原则此时结构体大小为5,再到c短整型2个字节5不是2的倍数所以要对齐一下直接到6再加上c的大小此时结构体大小为8,再到d字符型1个字节8是1的倍数所以不用对齐直接加上此时结构体大小为9,最后因为9不是a的大小倍数要使用补齐原则不上3为12也就是最终结构体的大小
原创粉丝点击