C语言中对齐概念的理解

 
c 语言中对齐概念:
问题:
1.什么是对齐?
答:变量要放到存储器中,如何放就产生了对齐问题。
一般说来,如果一个变量需要占X个字节,则该量的起始地址必须能够被X整数。这就是所谓的对齐。如果一个变量大小是一个字,则字对齐即可,如果是两个字,则双字对齐
2.对齐是对什么而言?只是结构体中的变量吗?
答:一般对一个(变)量而言,结构包括多个量,所以也存在对齐问题
3.为什么要使用对齐?对齐带来的好处是什么?
答:与操作速度相关
CPU==>CACHE==>MEMORY.
(1) 如果一个变量不对齐,则从MEMORY 到CACHE可能需要多次操作,因为CACHE取一般是是16,32,。。,或128个字节为单位,每次取都是对齐的。
(2)CPU操作对存储器操作也是对齐操作,如果量是对齐,则指令可以直接操作。如果不是对齐的,你想一想,应该怎么办?
所以,PPC规定量必须对齐,否则会直接报错。x86允许不对齐,但可能影响性能
注意:在设计结构体的时候要注意成员的合理布局
例:
struct
{
int a;
char b;    
}sa;
struct
{
int a;
char b;
double c;
}sb;
struct
{
int a;
double c;
char b;
}sc;
 
注:sizeof(int)=4;sizeof(char)=1;sizeof(double)=8
sizeof(sa)=8,sizeof(sb)=16,sizeof(sc)=24
结论:编译器以结构体中以成员变量中类型占用空间最大的作为分配单元(达到对齐),sa以sizeof(int)=4作为分配单元,所以在char b后填充了3个字节,sb,sc他们只是布局不一样,都是以sizeof(double)=8作为分配单元,在设计结构体时要注意成员的顺序
 

你可能感兴趣的:(C语言中对齐概念的理解)