结构体double类型的内存对齐
struct a
{
char a;
double b;
int c;
};
其内存布局应如下
a _ _ _ _ _ _ _
b
c _ _ _ _
sizeof(struct a) = 24;
但我这里有一个问题,32位CPU一次只处理4字节数据,对于double这种8字节变量会分成两次处理,既然分为两次处理,为什么不按照下面方式进行布局呢(小端)
a _ _ _ b低32位
b高32位 c
这样的话才占16字节,这块不是太明白
[解决办法]
这部分可以说是微软偷懒了,vs没判断机器的位长就默认设置为8,gcc是根据操作系统或编译选项的位长来设置默认对齐,32位是4,64位是8
[解决办法]
windows下的对齐方式和linux下的对齐方式是不一样的。结构体大小为24,是以8自己对齐,而在linux下对齐是以最大的4自己对齐。所以,结果是16.