首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

构造体double类型的内存对齐

2013-06-25 
结构体double类型的内存对齐struct a{char adouble bint c}其内存布局应如下a _ _ _ _ _ _ _bc_ _ _ _

结构体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.

热点排行
Bad Request.