32 位 CPU,`int` (4 bytes) 自然對齊地址為 4 的倍數 (0x0, 0x4, 0x8...)。
**x86 CPU 資料總線寬度 32 bits (4 bytes),記憶體控制器以 4-byte 為最小讀取單位 (自然對齊邊界)。**
// 記憶體內容 (每格 1 byte)
Addr: 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 ...
Val: AA BB CC DD EE FF 00 11 22 33 ...
// int *p = (int*)0x2; // 欲讀 0x2-0x5 (CC DD EE FF)
// CPU 實際操作:
Read 1: Addr 0x0, 取 4 bytes → AA BB CC DD (暫存)
Read 2: Addr 0x4, 取 4 bytes → EE FF 00 11 (暫存)
// 組合: 取 Read1[2:3] (CC DD) + Read2[0:1] (EE FF) → CC DD EE FF
// int *p = (int*)0x3; // 欲讀 0x3-0x6 (DD EE FF 00)
Read 1: Addr 0x0 → AA BB CC DD (取 DD)
Read 2: Addr 0x4 → EE FF 00 11 (取 EE FF)
Read 3: Addr 0x8 → 22 33 ... (取 00)
// 組合: DD + EE FF + 00 → DD EE FF 00
x86 允許未對齊存取但效能損耗大;ARM/MIPS 等架構直接拋出 Alignment Fault。編譯器預設對齊結構體成員 (`#pragma pack` 可調整),**嚴禁強制轉型指標到未對齊地址** (如 `(int*)0x2`)。