32 位和 64 位 CPU 之间有太多差异(内存处理、CPU 架构、总线等),这里无法详细介绍,但最大和最明显的差异是可寻址内存(即指针可以走多远) )。
以下面的代码为例:
#include <iostream>
int main(int argc, char* argv[])
{
// this is just to demonstrate 32 vs. 64
int* x = (int*)0xFFFFFFFFFFFFFFFF;
int* y = (int*)0x00000000FFFFFFFF;
std::cout << std::hex <<
"&x = " << x << std::endl <<
"&y = " << y << std::endl;
if (y == x) {
std::cout << "RIGHT!" << std::endl;
} else {
std::cout << "WRONG!" << std::endl;
}
return 0;
}
Q:您认为 32 位机器与 64 位机器上会打印什么?
A:一个非常不同的结果!
从上面的代码可以看出,如果我期望的话x
等于y
并在 32 位机器上进行测试,然后事情就会按照我的预期进行,我的代码将运行良好,每个人都很高兴!但后来我将此代码传递给一位朋友,他必须为他们的 64 位机器重新编译,他们肯定是not很高兴,因为他们看到的只是WRONG!
我不会深入探讨 32 与 64 的其他差异(例如设备和系统驱动程序或内核模块),因为它超出了本论坛的范围,但希望上面的代码可以说明为什么要为 32 位机器构建然后为 64 位机器重新编译并不像人们最初想象的那么简单。
因此,更直接地回答您的一些问题:
那么,我会得到什么?有什么好处吗?
这取决于你想做什么。如果您的程序永远不会达到 32 位 CPU 的限制,那么您不一定会看到为 64 位 CPU 构建的任何好处,并且根据 CPU 和操作系统,您实际上可能会看到性能下降(就像早期 64 位 CPU 上的 32 位模拟的情况一样),但对于现代内核和操作系统来说,这对于“普通”程序来说在很大程度上不是问题(保存事实上,您无法访问超过 4GB 的 RAM)。
但是,如果您的项目会消耗大量内存(例如网络浏览器),或者需要对非常大的数字集进行计算(例如 3D 计算),那么您肯定会看到以下事实的好处您可以为 64 位版本配置超过 4GB 的 RAM 或更大的分辨率。
这仅取决于您的项目范围以及您愿意支持的架构。
例如,Google Chrome 目前不支持 32 位,但不支持 64 位。可能是什么原因?
只有Chrome 团队 https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/FoE6sL-p6oU可以具体告诉你为什么要这样做,但我的猜测与几个原因有关。
首先,32 位 CPU 基本上正在消亡,因此取消对即将消亡的架构的支持意味着他们可以专注于改进 64 位架构。
第二个原因可能与记忆有关。 64 位版本的 Chrome 可以访问超过 4GB 的 RAM(假设系统有更多内存),因此具有 8GB RAM 的 64 位计算机将能够处理更多的浏览器会话,并且可能具有更高的响应能力(对单个会话)比在 32 位机器上。
此外,Wiki https://en.wikipedia.org/wiki/64-bit_computing有一个非常好的页面,详细介绍了 32 位到 64 位的转换以及各种注意事项,如果您有兴趣深入了解这些差异的话。
希望能有所帮助。