History
在 Linux 上如何處理向 64 位的轉變
在 Linux/Unix 上如何過渡到 64 位?Windows 世界似乎仍然存在問題,我很好奇它在 *nix 世界中是如何處理的。
使核心成為 64 位所需的工作是在很久以前使用 DEC Alpha 系統完成的。然而,程序是另一回事。
到目前為止,我所看到的普遍共識似乎是:
- 具有混合二進製文件的系統的單獨
/lib
和目錄/lib64
- 編譯為 64 位;如果編譯失敗,則重新編譯為 32 位,直到可以將原始碼清除為 64 位。
除此之外,你真的不會從混合 32/64 位建構中看到很多“悲傷”。
Windows 和 *ix 使用不同的數據模型進行轉換。這個 UNIX.org頁面有點舊,但它仍然很好地概述了權衡(注意
long long
後來添加到 C99,並且要求至少為 64 位)。您還可以查看有關同一主題的Wikipedia 文章。正如 UNIX.org 文章末尾所提倡的,大多數類 UNIX 系統都採用 LP64,這意味著long
、long long
和指針都是 64 位的。Windows 採用了所謂的 LLP64 數據模型,這意味著只有
long long
和 指針是 64 位的。long
仍然是 32 位。部分原因很簡單,他們不想檢查並修復假定long
適合int
.