[!内存对齐] 内存对齐是编译器为让数据在内存中按特定字节数排列的规则

目的是:提升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)(配合使用,形成 “设置对齐 -> 定义结构体 -> 恢复默认对齐” 的完整流程。