對於普通使用者來說,x86-32和x86-64來說可能最大的區別是定址範圍,32位保護模式(x86-32架構作業系統的工作模式)下似乎只能定址最大4GB記憶體,而x86-64的長模式可以定址16x10^18位元組的記憶體但是,這是錯的。x86-32架構的cpu,從很早的版本開始就支援“物理地址擴充套件”(PAE),該技術透過記憶體分頁機制將應用程式使用的32位地址對映到36位或52位。同樣,x86-64的cpu會做一個從64位線性地址到64位物理的對映,之後檢查這個64位物理地址的63到52位是否全0或全1,並取該地址的51到0位作為實際的物理地址。所以,第一點,就目前的cpu來說,無論工作在長模式下,還是32位保護模式下,定址能力都是52位。但是,因為線性地址從32位提高到了64位,單個程式能夠使用的記憶體量變多了。實際上,32位windows上的程式只能使用2gb記憶體,而64位windows的64位程式可用的記憶體量實際上是無限的。第二,長模式下cpu遮蔽了段機制,簡化了應用程式的記憶體管理,提高了單個暫存器的運算位數,並引入了一系列的新指令集和字首(比如rex),使得合理最佳化過的64位程式比32位程式效率要高一些。第三,長模式下引入了rip相對定址機制,使得“位置無關程式碼”的實現更容易而且更快。不過,因為64位windows下也要相容32位程式,所以windows不得不維持兩份相關程式碼,這就是wow64的來歷,wow64會多佔用一些資源。還有一點是,64位下的相容模式不再支援16位程式,所以執行16位程式需要額外的軟體,比如dosbox。
對於普通使用者來說,x86-32和x86-64來說可能最大的區別是定址範圍,32位保護模式(x86-32架構作業系統的工作模式)下似乎只能定址最大4GB記憶體,而x86-64的長模式可以定址16x10^18位元組的記憶體但是,這是錯的。x86-32架構的cpu,從很早的版本開始就支援“物理地址擴充套件”(PAE),該技術透過記憶體分頁機制將應用程式使用的32位地址對映到36位或52位。同樣,x86-64的cpu會做一個從64位線性地址到64位物理的對映,之後檢查這個64位物理地址的63到52位是否全0或全1,並取該地址的51到0位作為實際的物理地址。所以,第一點,就目前的cpu來說,無論工作在長模式下,還是32位保護模式下,定址能力都是52位。但是,因為線性地址從32位提高到了64位,單個程式能夠使用的記憶體量變多了。實際上,32位windows上的程式只能使用2gb記憶體,而64位windows的64位程式可用的記憶體量實際上是無限的。第二,長模式下cpu遮蔽了段機制,簡化了應用程式的記憶體管理,提高了單個暫存器的運算位數,並引入了一系列的新指令集和字首(比如rex),使得合理最佳化過的64位程式比32位程式效率要高一些。第三,長模式下引入了rip相對定址機制,使得“位置無關程式碼”的實現更容易而且更快。不過,因為64位windows下也要相容32位程式,所以windows不得不維持兩份相關程式碼,這就是wow64的來歷,wow64會多佔用一些資源。還有一點是,64位下的相容模式不再支援16位程式,所以執行16位程式需要額外的軟體,比如dosbox。