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)指定结构体字节对齐的话,后面的方式移植到其它系统可能会出现死机问题。
仔细看一下书中的说明吧,这三言两语介绍起来有点累或从网上查阅相关的技术资料,有详细描述。
一般简单来说,结构体从第一个变量开始检查空间的“对齐字节数”,
默认以第一个字节大小作为对齐字节数,如果遇上的下一个字节与当前对齐字节数不同时,就按两者中较大的来进行结构体空间分配,接下来的对齐就全按此值来对齐,直到再遇上不同的才进行检查或改变。