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