本文原內容為空,僅含標題。#pragma pack 用於控制結構體成員對齊方式,常用於網絡協議、文件格式解析、跨平台數據交換場景。
// 設置對齊為 n 字節 (n 為 2 的冪,通常 1, 2, 4, 8, 16)
#pragma pack(push, n) // 保存當前對齊並設置新值
// 結構體定義...
#pragma pack(pop) // 恢復之前的對齊設置
min(成員大小, #pragma pack 設置值)。
#pragma pack(push, 1) // 1 字節對齊 (緊湊模式)
struct PackedHeader {
uint16_t magic; // 偏移 0
uint32_t len; // 偏移 2 (無填充)
uint8_t flag; // 偏移 6
}; // sizeof = 7
#pragma pack(pop)
#pragma pack(push, 4) // 4 字節對齊
struct AlignedHeader {
uint16_t magic; // 偏移 0
uint32_t len; // 偏移 4 (填充 2 字節)
uint8_t flag; // 偏移 8
}; // sizeof = 12 (尾部填充 3 字節對齊 4)
#pragma pack(pop)
#pragma pack(1) 確保無填充,配合 static_assert(sizeof(Struct) == Expected) 驗證。alignas:現代代碼優先用 alignas(n) 增加對齊,#pragma pack 屬編譯器擴展,僅在必須**減小**對齊 (如 pack(1)) 時使用。提示:原文章內容缺失,此為補充的標準知識點總結。實際開發中請結合具體協議文檔編寫結構體定義並添加靜態斷言驗證大小。