首页
社区
课程
招聘
[求助]请教C++结构体内存对齐问题
发表于: 2009-4-1 15:50 4095

[求助]请教C++结构体内存对齐问题

2009-4-1 15:50
4095
今天复习C++的结构体内存对齐,有一点不太明白
struct xx
{
        double a;
        char b;
};

结构体xx的大小是16,(我用的是VC6.0)
如果说对齐是为了加快访问速度的话,我觉得按4字节对齐就可以了,为什么还要按最大的对齐呢?
谢谢您的回复!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 156
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
VC6默认的结构体 对齐是8字节 所以 要8的倍数
2009-4-1 20:49
0
雪    币: 177
活跃值: (232)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
1。Win32平台下的微软C编译器(cl.exe for 80x86)在默认情况下采用如下的对齐规则: 任何基本数据类型T的对齐模数就是T的大小,即sizeof(T)。
根据这条规则,他们总是取最大对其,就sizeof(double) = 8
2.VC的默认对齐选项就相当于/Zp8,即八字节对其

你可以强制对其即:
#pragma pack(4)
struct xx
{
  double a;
  char b;
};
#pragma pack(pop)
2009-4-1 22:06
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢楼上的回答。但是不太清楚为什么要这么做。按4的倍数对齐可以理解,在读这个数的时候只要访问一次内存就可以,但是为什么要按8的倍数来对齐?难道用的可以放8个字节的寄存器?或者别的什么原因?

谢谢啦!
2009-4-2 19:04
0
游客
登录 | 注册 方可回帖
返回
//