Man*_*ero 18 c 64-bit pointers compilation
大多数程序都适用于<4GB的地址空间,但需要使用x64架构上提供的新功能.
是否有编译器/平台,我可以使用x64寄存器和特定指令,但保留32位指针以节省内存?
是否可以透明地对遗留代码执行此操作?切换到底是做什么的?
要么
代码有什么变化,在保持32位指针的同时获得64位功能是必要的?
Jen*_*edt 16
绕过这种情况的一种简单方法是,如果您所指定的结构只有几种类型.然后你可以为你的数据分配大数组并使用uint32_t
.
因此,这种模型中的"指针"只是全局数组中的索引.通常用一个合适的编译器进行寻址应该足够有效,并且它可以节省一些空间.你可以放弃其他你可能感兴趣的东西,比如动态分配.
实现类似功能的另一种方法是编码与其实际位置不同的指针.如果你能确保这种差异总是适合32位,你也可以获益.
从技术上讲,编译器可以这样做。AFAIK,实际上它还没有完成。它已被提议用于gcc(即使在这里有一个补丁: http: //gcc.gnu.org/ml/gcc/2007-10/msg00156.html)但从未集成(至少,上次我没有记录它)检查)。我的理解是,它还需要内核和标准库的支持才能工作(即内核需要以当前不可能的方式进行设置,并且使用现有的 32 或 64 位 ABI 与内核进行通信是不可能的)。
值得注意的是,Linux 正在开发一个 ABI,X32,它允许您构建一个使用 32 位索引和地址的 x86_64 二进制文件。
只是相对较新,但仍然很有趣。
http://en.wikipedia.org/wiki/X32_ABI