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