码迷,mamicode.com
首页 > 其他好文 > 详细

结构体内存对齐

时间:2016-05-15 15:14:33      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

关于结构体内存对齐有一下几条原则:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!