64 位 Windows 為什麼選用 LLP64 字長模型?

時間 2021-05-11 23:07:43

1樓:

因為Windows NT團隊在表示32位定長型別時,選擇了使用LONG,後來不得不一直維持sizeof(LONG)==4

(作為對比,Windows 9x團隊使用DWORD,Linux核心使用u32。這兩種選擇下,修改long的長度沒那麼大影響。)

2樓:陳碩

我猜,是因為 Windows API 從 16-bit 公升級到 32-bit 發生得太晚了——大約是隨 1995 年發布的 Windows 95 而普及 。雖然之前有 Windows NT 3.x 和 Win32s,但似乎比較小眾。

而 Unix 從 16-bit 公升級到 32-bit 發生在 1980 年前後,當時執行在 VAX 上的 Unix/32V 和 3BSD 都是 32-bit 的。

造成的結果是,兩邊的程式對 short/int/long 的長度形成了不同的習慣認知:Unix 程式習慣了 int 是 32-bit,而 long 不一定只有 32-bit。Windows/DOS 習慣了 long 是 32-bit,而 int 有可能是 16-bit 或 32-bit,因為剛剛從 16-bit 公升級上來嘛。

當往 64-bit 公升級的時候,如果把 Windows 的 long 公升級到 64-bit,會破壞原來很多程式的假設,只好用個新的型別來表示 64-bit 整數了。反正 LONGLONG 在 32-bit 程式中也是 64-bit 整數,乾脆用它好了。

為什麼 Windows 上還沒有普及 64 位的軟體?

無缺草 使用64位作業系統主要是為了解決32位無法訪問超過4G記憶體的問題。32位作業系統實際只能訪問3.2G左右的記憶體,而現在較新的電腦普遍都有4G 16G記憶體。64位作業系統相容32位和64位軟體。實際體驗一下就知道,32位比64位軟體更優越。32位軟體執行速度更快,資源占用更小,程式檔案也...

為什麼 64 位作業系統可以執行 32 位應用程式?

pansz amd64 架構,以及 intel em64t 架構的 CPU 都實現了一種 在 64 位模式下執行 32 位程式 的方式。這個模式最初是 amd 設計的,有興趣的可以檢視當年 amd k8 cpu 的技術文件,裡面有非常詳細的描述。從某種意義上說,intel 的 ia64 之所以失敗,...

64 位軟體和 32 位有什麼具體區別?

提鴻飛 最近在研究32位和64的區別搞懂區別之後很是糾結。在研究過程中看到了這個問題,但我不知道這個問題是什麼時候發的了解釋區別又有些麻煩我先隨便解釋一下如果想知道具體的隨便乙個人回覆我一下就行 如果我還能記得這道題。首先是說32位系統 簡稱32 和64位系統 簡稱64 的區別 32只能執行32位程...