字节序:
32位处理器每次处理 4 个字节。
当数据类型大于1个字节时,其在内存中的顺序存在两种模式:
(1)小端:低字节放在低地址
(2)大端:低字节放在高地址
边界对齐:
边界对齐是处理器为了提高处理性能而对存取数据的起始地址所提出的一种要求。
typedef struct{
char a_;
int b_;
}
在采用边界对齐处理的情形下,当处理器需要访问 a_ 和 b_ 变量时只需进行一次存取。
而在不采用边界对齐时,a_ 变量无论如何只要进行一次存取,b_ 变量却需要两次。
C语言除了对结构体或联合体内的变量进行对齐处理外(从结构内部的角度),还需要将整个数据结构分配在以4字节为边界的地方才有意义。
在默认的情况下,编译器将采用边界对齐的处理方式来提高程序的执行效率。但是,我们有时并不希望存在这种字节对齐处理方式,比如说,在两台主机进行网络通信时,我们并不希望因为字节对齐而传送多余的字节。为了避免编译器进行字节对齐处理,可以在结构之前加上“#pragma pack(1)”预处理指令,它告诉编译器对指定的数据结构采用单字节对齐方式进行处理。
#pragma pack(1)
typedef struct {
char a_;
int b_;
}type_t;
int main()
{
type_t tp;
tp.b_ = 1;
return 0;
}