您的位置:首页 > 其它

关于边界对齐的问题

2015-10-12 10:37 211 查看
边界对齐是什么?就是某种数据类型的存储地址有一定要求。对于计算机而言,理论上每个字节都可以用来存储数据,但是有些CPU或者由于什么其他原因,它们在读取数据时是按照对齐的方式来读取的。比如说,对于int型而言,intel默认是按照4字节的对齐要求来读取的。这样的读取可以在一个周期内完成。而如果不是这样的,那么可能需要2个周期或者更多时间来完成一个数据的读取。

这也就解释了为啥需要边界对齐。但是我们在写C程序时,并没有考虑边界对齐的问题,那么这部分工作是谁做的?答案是编译器,边界对齐的工作,由编译器自动完成。

边界对齐的要点是什么?

简单的说,对于int型而言,起始地址为4的倍数;对于char类型而言,起始地址为任意字节皆可;对于short类型而言,起始地址为2的倍数;对于结构体而言,对齐方式为结构体内类型最大的字节量;对于联合体而言,对齐方式要与内部元素的最大对齐字节数一致。

举例如下:

struct ex1 {

char e1;

int e2;

short e3;

};//size:12

union ex2

{

char a;

int b;

double c;

struct d { int x; int y; int z; };

};//size:8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: