什么是C语言结构体字节对齐,为什么要对齐

Python011

什么是C语言结构体字节对齐,为什么要对齐,第1张

arm支持16bit和32bit的地址访问,即变量地址能够被2或4整除,这时性能比较好,也便于移植。结构体的对齐就是指的结构体内部的每个成员变量地址尽可能对齐到2或4字节位置,如定义为:

struct{

char

ch1

char

ch2

short

ss

int

i

}var

字符变量ch1,

ch2为字节对齐,短整型变量ss为半字对齐,整型变量i为字对齐,结构体内的变量比较紧凑,且已自然对齐,结构体变量var占用总空间为8个字节。如果改为这样:

struct{

char

ch1

short

ss

char

ch2

short

ss

int

i

}var

var变量最终占用的空间为12个字节,存取这个结构体时比前面那个需要的时间要多,另外如果用pack(1)指定结构体字节对齐的话,后面的方式移植到其它系统可能会出现死机问题。

仔细看一下书中的说明吧,这三言两语介绍起来有点累

或从网上查阅相关的技术资料,有详细描述。

一般简单来说,结构体从第一个变量开始检查空间的“对齐字节数”,

默认以第一个字节大小作为对齐字节数,如果遇上的下一个字节与当前对齐字节数不同时,就按两者中较大的来进行结构体空间分配,接下来的对齐就全按此值来对齐,直到再遇上不同的才进行检查或改变。