x86-64指令集添加了更多寄存器和其他改进,以帮助简化可执行代码.但是,在许多应用中,增加的指针大小是一种负担.每个指针中额外的未使用字节会阻塞缓存,甚至可能溢出RAM.例如,GCC使用-m32
标志构建,我认为这就是原因.
可以加载32位值并将其视为指针.这不需要额外的指令,只需加载/计算32位并从结果地址加载.但是,这个技巧不可移植,因为平台有不同的内存映射.在Mac OS X上,保留了整个低4 GiB的地址空间.尽管如此,对于我编写的一个程序,0x100000000L
在使用改进的性能大大优于真正的64位地址或编译之前,仍坚持添加32位"地址" -m32
.
使用32位x86-64平台有任何根本障碍吗?我认为支持这样的嵌合体会增加任何操作系统的复杂性,任何想要最后20%的人应该只是Make it Work™,但似乎这仍然是最适合各种计算密集型程序的.