【原创】对齐一点点理解
对编译器编译程序时对齐的一点点理解,作此笔录。
32位的C++采用默认8位对界来提高运行效率,所以编译器会尽量把数据放在它的对界上以提高内存命中率。意即,假设现在有个int型数据,int占4个字节(这里假设没有指定对界,采用默认的对界8),与默认对界之间取较小方,则取值4,则该int型数据应放在内存地址为4的整数倍的位置,这样便于寻找。实际上在编译器会为变量在内存中分配一定的空间,他们的放置不是紧凑的一个接一个的放在一起,因为这样不利于编译器效率,以结构体存储举例,在内存中对变量的存储会以变量所占字节数最大的变量进行对齐,为什么要以最大对齐呢?一个结构体:
type Struct
{
int a;
char c;
short s;
}TestStruct;
{
int a;
char c;
short s;
}TestStruct;
试想一下,假如使用s变量两字节进行对齐,这样会造成int 类型的a无法在编译器一次存取数据的字节组中储存,一定会被逼分配在不同的字节数组中。
在对齐的过程中,假如变量无法在某字节数组中存储,会自动放在下一个字节数组中进行存储。其实对齐不是我们的工作,是编译做的,但是如果能理解好对齐,对程序代码能达到更好的优化。至于好处在之前的一篇转载文章也介绍过。http://www.cnblogs.com/IamEasy_Man/archive/2009/12/13/1623187.html
posted on 2009-12-13 22:02 IamEasy_Man 阅读(235) 评论(0) 收藏 举报
浙公网安备 33010602011771号