概述
边界对齐是什么?就是某种数据类型的存储地址有一定要求。对于计算机而言,理论上每个字节都可以用来存储数据,但是有些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
最后
以上就是苹果羽毛为你收集整理的关于边界对齐的问题的全部内容,希望文章能够帮你解决关于边界对齐的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复