读书人

关于内存储器对齐这个想不明白

发布时间: 2012-09-06 10:37:01 作者: rapoo

关于内存对齐,这个想不明白。
下面代码,sizeof(SS)==16,我能理解。
但sizeof(SB)==40,我不能理解。

为什么sizeof(SB)==40?

为什么SB的大小,不是SS大小的整数倍?内存对齐,不是说要填补的吗?


C/C++ code
struct SS {    double d;    int i;};struct SB {            SS ss;    char j;      double d;      int a;   };  


[解决办法]
下面是SB的内存分布:
class SB size(40):
+---
0 | SS ss
16 | j
| <alignment member> (size=7)
24 | d
32 | a
| <alignment member> (size=4)
+---
可以看出系统是认识SS的
结构体的总大小为结构体最宽基本类型成员大小的整数倍,注意是基本数据类型,SS不是哦
所以存完a是36,补齐8的倍数,40!
[解决办法]
struct SS
{
double d;
int i;
};

struct SB
{
SS ss; //[0-15]
char j; //[16]
double d; //[24-31]
int a; //[32-35]
}; //36按8取整 40

读书人网 >C++

热点推荐