您的位置:首页 > 其它

结构体内存对齐

2014-10-26 13:20 246 查看
看了一些内存对齐的文章后,自己做的一个小笔记。

内存对齐注意点:

1.确定对齐模数:结构体变量类型,所占字节最多的

2.对齐时,注意存储变量的首地址要能被变量类型所占字节数整除

3.结构体最后的大小要是对齐模数的整数倍

例子1:

struct a

{

char c;

int b;

};

结构体大小为 :1 + 3 + 4  = 8;

由于int 的地址为1,不能被4整除,故c填充3个字节(起始地址为0)

例子2:

struct  a

{

int b;

char c;

};

结构体大小为: 4 + 1 +3 = 8;

由于b+c共5个字节,为了能被对齐模数整除,c后面填充3个字节

例:子3:

struct  a

{

char b;

short c;

int d;

};

结构体大小:1 + 1 + 2  + 4 = 8;

由于short的地址为1,且sizeof(short) = 2;  不能被2整除,故b后面填充一个地址

例子4:

struct  a

{

char b;

char c;

short d;

int e;

};

结构体大小:1 + 1 + 2 +4 =8;

例子5:

struct a

{

char b;

short c;

char d;

int e;

};

结构体大小: 1 + 1 + 2 +1 +3 + 4 = 12

由于c 的地址为1,故b填充1个字节,由于e的地址为5,故d后填充3个字节

例子6:

struct b

{

short c;

struct a d;          //a为例子5结构体

};

结构体大小:2 + 2 + 12 =16

由于sizeof(c) = 2;结构体a 的对齐模数是4,且d的地址为2,故c后填充2个字节
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  内存 struct