| 項目 | 32位 | 64位 | 影響 |
|---|---|---|---|
| 指針大小 | 4 字節 | 8 字節 | 指針算術、結構體大小、序列化 |
| long / size_t / ptrdiff_t | 4 字節 | 8 字節 (LP64 模型) | 數組索引、內存分配大小、指針差值 |
| int | 4 字節 | 4 字節 | 通常不變,但不要假設 int 能存指針 |
| time_t | 4 字節 (到 2038 年溢出) | 8 字節 | 時間處理、Y2038 問題 |
| 結構體對齊 | 4 字節對齊 | 8 字節對齊 | 結構體大小變化、二進制兼容、網絡協議 |
| 調用約定 | __cdecl/__stdcall (棧傳參) | x64 calling convention (寄存器傳前 4 參) | 彙編/混合編程、調試棧回溯 |
| DLL 依賴 | 載入 32 位 DLL | 載入 64 位 DLL | 插件/第三方庫必須匹配位數 |
long ptr = (long)pointer; 64 位下截斷高 32 位 → 崩潰。用 uintptr_t / intptr_t 存指針。printf("%d", pointer); 錯誤,用 %p 或 PRIxPTR。fwrite(struct) 跨平台不兼容,需显式打包或用 Protobuf/FlatBuffers。-m64 (GCC/Clang) 或 VS 專案屬性 → Platform Target = x64。long、int 存指針/句柄的地方,改用 intptr_t/uintptr_t/HANDLE。printf/scanf 格式符。**64 位不只是指針變長,是整個數據模型變化,系統性遷移而非點點改改。**