1.字节对齐的作用
加快CPU访问内存速度,平台移植
2.如何计算字节对齐后的结构体大小
输入下面代码:
#include <stdio.h>
struct stTest
{
int a;
char b;
short c;
};
int main()
{
printf( "%u\n", sizeof( stTest ) );
return 0;
}
输出结果为8.
字节对齐有几个原则:
1.默认情况下结构体最大成员的大小作为 该结构体 参考字节对齐大小
2.结构体中每一个成员拥有自身的字节对齐大小,其大小为min( 自身大小, 参考字节对齐大小或指定大小 )( 取较小的值 )
3.除第一个成员外其他每个成员变量开始内存存放地址必须为其自身字节对齐大小的整数倍
4.结构体最后的大小必须为参考字节对齐大小的整数倍
由以上原则我们可以计算:
上面结构体int a最大所以sizeof( int ) = 4字节对齐
则a自身对齐大小为min( 4,4 )占用4字节地址为:0x000-0x003
则b自身对齐大小为min(1,4)占用1字节地址为:0x004-0x004 ( 0x004恰好是b自身对齐大小的N倍所以直接从0x004开始即可 )
则c自身对齐大小为min(2,4)占用2字节地址为:0x006-0x007( 由于0x005不是c自身对齐大小的N倍所以跳过0x005从0x006开始存放c )
所以0