Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117147
  • 博文数量: 24
  • 博客积分: 1411
  • 博客等级: 上尉
  • 技术积分: 261
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-07 17:49
文章分类

全部博文(24)

文章存档

2009年(24)

我的朋友

分类: C/C++

2009-08-07 18:02:37

错了请指出,不胜感激!

Linux下对齐的标准是: char型 1字节对齐, short型 2字节对齐, int和int以上的都4字节对齐。

window下的对齐标准是: 占几字节就按几字节对齐,所以double在linux里4字节对齐,在windows里8字节对齐。

如果是struct,那两个都要保证struct的总大小是其中最大数据类型的整数倍,这是为了方便对齐使用此struct的数组。

.........................................................................................

struct mystru1 // linux windows下都占3字节, 没多占用空间

{
char c;
char d;
char e;
};



// linux,windows下都是 16字节,为了int j的起始地址是4的倍数, char c后补了3个空字节,

//为了struct的总大小是4的倍数 (因为其中最大是int) , char d 后补了3个空字节.


struct mystru2
{
int i;
char c; // 后补3字节

int j;
char d; // 后补3字节

};


linux下占24,windows下占32,就因为linux下double i是4对齐,windows下是8对齐,所以第一个char c 后,linux补3字节,windows补7字节. 最后总大小,linux下只需是4的倍数,win下必须是8的倍数.


struct mystru3
{
char c; //win下补7字节,linux下补3字节

double i;
double q;
char b;
char d; // win补6, linux补2.

};

阅读(2654) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~