關於「Win、Linux、mac 等系統的整型是否佔 4 字節、字符類型是否佔 2 字節」這一問題,答案是否定的。資料類型的大小不由作業系統或 CPU 架構決定,而是由編譯器的實現標準(如 C/C++ 標準)與目標平台的 ABI(應用程式二進制介面)共同約定。
許多開發者在 32 位 x86 環境下長期使用 GCC、MSVC 等主流編譯器,習慣了 int 為 4 字節、wchar_t 為 2 字節(Windows)或 4 字節的現象,以此為普遍真理。實際上,C/C++ 標準僅規定了最小範圍與相對大小關係(如 sizeof(char) == 1、sizeof(short) <= sizeof(int) <= sizeof(long)),具體字節數由編譯器廠商根據目標平台的性能與兼容性考量決定。
int 僅佔 2 字節。即使在 Windows 8 32 位版、Intel Core i7 64 位處理器上運行經 Turbo C 編譯的 16 位程式,int 依然是 2 字節。long 與指針均為 8 字節,而 int 仍為 4 字節。long 維持 4 字節,long long 與指針為 8 字節。int 為 2 字節,char 可能為 1 字節但帶符號性實現定義。char 永遠佔 1 字節(定義上),但有無符號由實現定義。wchar_t 在 Windows 為 2 字節(UTF-16),Linux/macOS 通常為 4 字節(UTF-32)。C++11 新增 char16_t、char32_t 明確固定大小,建議跨平台代碼優先使用這些類型或 std::int32_t 等固定寬度整型(
sizeof(int) 等假設,改用 int32_t、int64_t 等固定寬度類型。static_assert(sizeof(MyType) == ExpectedSize, "Size mismatch");。總結:資料類型大小是編譯器與平台 ABI 的協約產物,而非作業系統屬性。編寫可移植代碼時,務必查閱目標平台的 ABI 文檔並使用標準固定寬度類型。