x86-64指令集增加了更多寄存器和其他改進以幫助簡化可執行代碼。但是,在許多應用中,增加的指針大小是一種負擔。每個指針中額外的,未使用的字節堵塞了緩存,甚至可能導致RAM溢出。例如,GCC使用-m32
標誌建立,我認爲這是原因。32位指針與x86-64 ISA:爲什麼不呢?
可以加載一個32位值並將其視爲指針。這不需要額外的指令,只需加載/計算32位並從結果地址加載即可。但是,這個技巧不會便攜,因爲平臺具有不同的內存映射。在Mac OS X上,整個地址空間的低4 GiB被保留。儘管如此,對於我寫的一個程序,在使用與真正的64位地址相比更好的性能或者使用-m32
進行編譯之前,先將0x100000000L
添加到32位「地址」中。
使用32位x86-64平臺有什麼根本障礙嗎?我認爲支持這樣一個嵌合體會給任何操作系統增加複雜性,任何想要最後20%的人都應該只是讓它工作,但它似乎仍然最適合各種計算密集型程序。
大多數應用程序中的分析數據表明由於指針大小增加而沒有顯着的損失。 – Puppy 2012-02-10 19:09:02
英特爾編譯器有['Qauto-ilp32']選項(http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/copts/ccpp_options/option_qauto_ilp32 .htm)「嘗試」使用32位指針 - 即使在x64模式下也是如此。 – Mysticial 2012-02-10 19:10:31
@Mysticial,但更像是老式的「近」和「遠」指針,對吧?我想這個解決方案是可以的,但它並不像我指的那麼幹淨。 – Potatoswatter 2012-02-10 19:12:41