字节对齐总结
字节对齐总结
字节对齐的依赖关系如下图所示,字节对齐规则主要依赖于数据类型的有效对齐值,而数据类型的有效对齐值又是自身对齐值和指定对齐值中的较小者。对于有成员的数据类型(类、结构体),自身对齐值等于成员自身对齐值中的最大值。指定对齐值由伪指令#pragma pack(n)决定,默认指定对齐值一般为4。
其实我们自己可以定义一个容器和成员的概念,假如现在内存中有一个结构体变量,那么该结构体的容器是内存,该结构体作为内存的成员存在于容器中。结构体本身也是个容器,那么结构体的成员变量就是该容器的成员。
基于容器和成员我们可以规定对齐规则如下:
1、 成员基于容器的偏移地址必须能整除有效对齐值N,比如int类型的成员的偏移地址必须被4整除。
2、 容器大小必须是最宽基本数据类型成员的整数倍,容器的大小就是容器在更大的容器里作为成员时的自身对齐值。在32位操作系统环境下,最宽基本数据类型成员如果超过了4字节,那么容器大小只需要保证是4的整数倍就行了。在64位操作系统环境下,最宽基本数据类型如果超过了8字节,容器大小只需要保证是8的倍数就行了。
参考链接:
https://www.cnblogs.com/clover-toeic/p/3853132.html
https://blog.csdn.net/lyh__521/article/details/45958847