我想我关注的是x86,但我通常对从32位到64位的迁移感兴趣。
从逻辑上讲,我可以看到,在某些情况下,常量和指针会更大,因此程序可能会更大。为了提高效率,希望在单词边界上分配内存,这意味着分配之间会有更多的空白。
我还听说,当上下文切换时,由于可能存在重叠的4G地址空间,x86上的32位模式必须刷新其缓存。
那么,64位的真正好处是什么呢?
作为补充问题,128位会更好吗?
编辑:
我刚刚编写了我的第一个32/64位程序。它生成16字节(32b版本)或32字节(64b版本)对象的链表/树,并对stderr进行大量打印-这不是一个真正有用的程序,也不是什么典型的程序,但它是我的第一个程序。
尺寸: 81128(32b)与83672(64b) -差别不大
速度: 17s(32b) v24s(64b)-在32位操作系统( OS -X 10.5.8)上运行
更新:
我注意到一个新的混合x32 ABI (应用程序二进制接口)正在开发中,它是64b的,但使用32b的指针。对于某些测试,它比32b或64b产生更小的代码和更快的执行速度。
发布于 2010-03-04 18:43:27
除非您需要访问比32b寻址所允许的更多的内存,否则好处将是很小的。
当在64bCPU上运行时,无论您运行的是32b代码还是64b代码(您使用相同的缓存和相同的总线),都会得到相同的内存接口。
虽然x64架构有更多的寄存器,可以更容易地进行优化,但这通常会被指针现在更大的事实所抵消,使用任何带有指针的结构都会导致更高的内存流量。我估计与32b应用程序相比,64b应用程序的总内存使用量增加了大约15-30%。
发布于 2010-03-04 19:18:31
我通常会看到,与x86相比,x86-64上计算密集型代码的速度提高了30%。这很可能是因为我们有16 x 64位通用寄存器和16 x SSE寄存器,而不是8 x 32位通用寄存器和8 x SSE寄存器。这适用于x86-64 Linux上的英特尔ICC编译器(11.1) -与其他编译器(例如,gcc)或其他操作系统(例如,Windows)的结果当然可能不同。
发布于 2012-12-21 20:55:10
除了拥有更多的寄存器之外,64位在默认情况下还具有SSE2。这意味着你确实可以并行执行一些计算。SSE扩展还有其他好处。但是我想主要的好处是不需要检查扩展的存在。如果它是x64,那么它有可用的SSE2。...If我的记忆没记错。
https://stackoverflow.com/questions/2378399
复制相似问题