标签:
关于结构体内存对齐有一下几条原则:
1.每个元素的偏移量=Min(对应元素的字节数,系统或编译器的对齐字节数)。
2.结构体的大小的,其最大元素字节数的整数倍。
3.结构体的大小是,最后一个元素偏移量+最后一个元素大小+可能补充的字节。
4.如果结构体中有数组,当做单一元素看待。
struct aa1{ char c[4]; //1byte char szBuf[5]; };
struct aa2{ int c; char szBuf[5]; };
上面连个结构体大小,其实是不同的。
先看aa2:
c的偏移量为0,c为4字节。下个偏移量至少从4开始。szBuf是5个char。偏移量为1的倍数,自然是1.所以偏移量为4。
结构体大小=最后一个元素偏移量4+最后一个元素大小5+可能补充的字节(结构体是最大元素的整数倍,最大元素是int4字节,现在是4+5=9),所以补充3=12.
再看aa1:
c的偏移量为0,c为4个char字节。下个偏移量也是至少从4开始。szBuf是5个char。偏移量为1的倍数,自然是1。所以偏移量为4。
结构体大小=最后一个元素偏移量4+最后一个元素大小5+可能补充的字节(结构体是最大元素的整数倍,最大元素是char1字节,现在是4+5=9),所以无需补充=9。
标签:
原文地址:http://www.cnblogs.com/wyc199288/p/5495124.html