我试图找出哪种应用程序(CPU 密集型、IO 密集型、CPU/IO 应用程序的良好组合)值得在 64 位硬件上放置 64 位操作系统,而不是在 RAM 无法扩展的 32 位操作系统上超过4GB?
答案1
TL;博士;在 Intel/AMD CPU 上,32 位模式下的速度与 64 位模式下的速度差不多。
至于更详细的答案:
这取决于很多事情:
Qua 非性能:您将可以访问更大的地址空间。这是一件好事。
该地址空间用于很多用途,包括:
- 映射 IO 设备(例如图形卡缓冲区,已经可以达到 6 GiB)
- 物理内存(这会导致最大 4GiB RAM 限制,假设没有 PEA)
- 对于虚拟内存(为了安全起见,请将程序半随机映射到此。因此请保留几 GB 可用空间。换句话说,如果您有 32 位和一些 PCI[e] 空间,那么请不要为 RAM 和 IO 使用超过 512MiB ,这样您就可以为地图程序保留足够的地址空间,并保持半随机的安全性)。看http://en.wikipedia.org/wiki/ASLR作为地址空间布局随机化的一个很好的起点。
四性能:
- 64 位代码使用的指针大小是 32 位点的两倍。这使得程序变得更大,并且最终用于其他任务(例如缓冲区)的内存更少。
- 较大的程序需要更多的缓存,否则缓存效率会降低。
仅在 AMD 或 Intel CPU 上:
- 在 amd64 模式下,您获得的寄存器数量是 32 位模式下的两倍。由于 x86 架构的寄存器数量相对较少,因此您需要大量内存访问,这是一件坏事。如果您的程序不受内存限制,那么这可以大大加快速度。
- Amd64(即 Intel 和 AMD CPU 的 64 位模式,不要与 Intel 混淆IA64位模式有很大不同)仅支持不执行位如果您在 64 位模式下运行,则在其页表中。安全方面你也想要这个。
话虽如此,为了你的*平均的程序和 amd64 上:没有速度变化。优点和缺点看起来同样大并且相互抵消。在其他架构上情况并非如此,例如 Power PC 64,它在 32 位和 64 位版本的芯片中都配备了足够的寄存器。
最后,出于实际原因:
- 如果您认为可以将内存扩展至超过 4 GiB,请始终使用 64 位版本。
- 如果您安装了多个操作系统,请尝试在所有操作系统上使用相同的版本,以保持简单。 (现在这意味着所有这些都使用 64 位版本)。
- 为了安全起见,如果您使用具有地址空间随机化的操作系统,请在具有 512MiB+ RAM 的所有节点上使用它。 (阅读:适用于任何现代操作系统)。
答案2
简单的答案是,除非您不断地充分利用 4GB RAM,否则 32 位通常会获得与 64 位相同的性能。事实上,大多数 32 位应用程序的内存占用较小,因此有时 32 位的性能会比 64 位更好。 4GB RAM 之后,64 位比 32 位好得多,但在此之前您可以选择任何一种方式,都不会看到太大的性能差异。