[!内存对齐] 内存对齐是编译器为让数据在内存中按特定字节数排列的规则
目的是:提升CPU访问数据的效率(CPU读取内存通常按2/4/8 字节等“块”操作)
取消内存对齐
[!取消内存对齐] 在 C 语言中,
#pragma pack(1)用于设置结构体的按 1 字节对齐(取消字节对齐优化),这在需要精确控制结构体内存布局的场景(如协议解析、文件格式处理等)中非常常见。
#pragma pack(1)
typedef struct
{
char a; // 1字节
short b; // 2字节(在1字节对齐下紧跟char之后)
int c; // 4字节(无额外填充)
long long d; // 8字节(连续存储)
float e; // 4字节
double f; // 8字节
unsigned char g[5]; // 5字节数组
} your_struct;
#pragma pack()这个结构体的总大小就是所有成员大小的总和(1+2+4+8+4+8+5=32 字节),因为#pragma pack(1)禁用了编译器默认的字节对齐填充
#pragma pack() 用于恢复编译器默认的结构体对齐方式,通常与 #pragma pack(n)(配合使用,形成 “设置对齐 -> 定义结构体 -> 恢复默认对齐” 的完整流程。