首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 結構體 vs 聯合體:記憶體佈局差異與應用場景

     編輯:程式設計綜合問答

核心差異

範例對比

struct StructEx { int a; double b; char c; }; // 大小通常 24 bytes (對齊)
union UnionEx { int a; double b; char c; };   // 大小通常 8 bytes (double 最大)

應用場景

  • 結構體:99% 自定義資料型別、類別基礎。
  • 聯合體:
    • 網路協議頭部:同一緩衝區解析不同訊息型別。
    • 硬體暫存器:位元欄位 + 整數雙關存取。
    • Variant 型別實現 (配合標籤欄位) — C++17 `std::variant` 為現代替代。

MFC 特有補充

MFC 中 `UNION` 常用於訊息映射、訊息結構 (如 `MSG`)、GDI 物件屬性結構,屬 Windows API 互操作需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性結構體 (struct)聯合體 (union)
記憶體分配**所有成員各自佔用空間**,總大小 ≥ 成員大小總和 (含對齊填充)**所有成員共用同一塊記憶體**,總大小 = 最大成員大小 (含對齊)
同時有效成員**所有成員同時存在**,可並行存取**同一時間僅一個成員有效**,寫入一個會覆蓋其他
典型用途聚合相關資料 (如座標、員工記錄)省記憶體、型別雙關、硬體暫存器映射、網路封包解析