| 類型 | 16位編譯器 | 32位編譯器 | 64位編譯器 | 備註 |
|---|---|---|---|---|
| char / signed char / unsigned char | 1 | 1 | 1 | 標準保證 1 字節 |
| char* (指標) | 2 | 4 | 8 | 指標大小 = 地址總線寬度/8 |
| short / unsigned short | 2 | 2 | 2 | 至少 16 位 |
| int / unsigned int | 2 | 4 | 4 | 通常 = 寄存器寬度 |
| long / unsigned long | 4 | 4 | 8 | Windows 64位仍為4(LP64 vs LLP64) |
| long long / unsigned long long | 8 | 8 | 8 | C99 引入,至少 64 位 |
| float | 4 | 4 | 4 | IEEE 754 單精度 |
| double | 8 | 8 | 8 | IEEE 754 雙精度 |
| long double | 8/10/12/16 | 8/10/12/16 | 8/10/12/16 | 實現相關,x86 常為 10 字節(80位) |
int32_t/int64_t (stdint.h)。#pragma pack 或屬性 __attribute__((packed)) 影響,上表為單獨變量大小。strlen(str) 返回不含結束符的字符數;分配緩衝區需 strlen(str) + 1。結構體中柔性數組成員(C99)需動態計算總大小。
sizeof(type) 而非硬編碼數字。stdint.h,統一用 int32_t, uint64_t 等確寬類型。