在AMD64计算机上使用-m32和-mtune = native进行编译将使用32位指针进行正确的评估,因此数据结构会稍微缩小,因此会有更密集的缓存打包。我的应用程序(它仍处于设计阶段)不需要超过GB的内存,因此32位地址空间应该没问题。我希望利用位缩小的数据结构来获取缓存中的更多数据,并且还有可能将更多寄存器用于整数数学。我想要实现的是两个世界中最好的,更多的寄存器凭借-mtune = native,但是更小的指针-m32。是否可以自动处理额外寄存器的可用性,还是必须明确处理sse。我宁愿不。
答案 0 :(得分:1)
至少如果我理解你想要什么,我认为编译器不会为你做这个工作。它将产生32位或64位代码。对于64位代码,指针将是64位 - 如果你想要32位指针,你将不得不生成32位代码(具有相应的限制,例如它将使用的寄存器)
为了得到你想要的东西,我很确定你必须自己拆分指针:存储一个(可能是64位的)基地址,并在你的数据结构中存储偏移而不是完整的地址。在尝试取消引用之前,您需要自己添加基数和偏移量。
答案 1 :(得分:0)
是的,-m32应该使用32位指针。您可以通过打印sizeof(int *)来确认。
然而,64位应用程序在指令集中可以访问更多寄存器(除了它们更大) - 因此您可能会产生相反的效果。这取决于应用程序哪个效果(更大的指针与更多的寄存器)具有更大的影响,通常我建议尝试两者并比较性能。