rvi*_*nca 4 c c++ native 32bit-64bit
如果我有一个像 HelloWorld 这样的 C++ 编写的简单程序,然后我在 32 位和 64 位机器上编译它,我会得到两个不同的二进制文件,但它们是不同的机器代码,只有 32 位二进制文件能够在 32 位或 64 位机器上运行。
在这两种情况下,我都没有任何好处,因为源代码是相同的,而且它们的作用相同。这让我觉得某些为 32 位编写的 Linux 发行版的所有软件包都可以移植到 64 位机器上,而无需做任何更改。那么,我能得到什么?有什么好处吗?
是否有任何 C/C++ 代码示例可以在 64 位中执行而在 32 位中无法执行?
例如,目前 32 位不支持 Google Chrome,但 64 位不支持。这可能是什么原因?
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;
}
Run Code Online (Sandbox Code Playgroud)
问:您认为 32 位机器和 64 位机器会打印什么?
A:完全不同的结果!
从上面的代码中可以看出,如果我希望在 32 位机器上x
进行相等y
和测试,那么事情会按我的预期进行,我的代码会运行良好,每个人都很高兴!但后来我这段代码传给谁拥有重新编译他们的64位机的朋友,他们肯定不会高兴,因为他们所看到的是WRONG!
我不会深入探讨 32 与 64 的其他差异(如设备和系统驱动程序,或内核模块),因为它超出了本论坛的范围,但希望上面的代码可以说明为什么要为 32 位机器构建然后为 64 位机器重新编译并不像人们最初想象的那样枯燥无味。
所以更直接地回答你的一些问题:
那么,我能得到什么?有什么好处吗?
这取决于你想要做什么。如果您的程序永远不会达到 32 位 CPU 的限制,那么您不一定会看到为 64 位 CPU 构建的任何好处,并且根据 CPU 和操作系统,您实际上可能会看到性能下降(就像在 64 位 CPU 上进行 32 位仿真早期的情况一样),但是对于现代内核和操作系统,这对于“普通”程序来说基本上不是问题(除了您不能访问超过 4GB 的 RAM)。
但是,如果您的项目会消耗大量内存(例如 Web 浏览器),或者需要对非常大的数字集进行计算(例如 3D 计算),那么您肯定会看到好处您可以为 64 位版本处理超过 4GB 的 RAM 或更大的分辨率数字。
这仅取决于您的项目范围以及您愿意支持的架构。
例如,目前 32 位不支持 Google Chrome,但 64 位不支持。这可能是什么原因?
只有Chrome 团队可以具体告诉你为什么要这样做,但我的猜测与几个原因有关。
首先是 32 位 CPU 大部分正在消亡,因此终止对垂死架构的支持意味着他们可以专注于改进 64 位架构。
第二个原因可能与内存有关;64 位版本的 Chrome 可以访问超过 4GB 的 RAM(假设系统有更多),因此具有 8GB RAM 的 64 位机器将能够处理更多的浏览器会话,并可能具有更高的响应速度(对单个会话)而不是在 32 位机器上。
此外,Wiki有一个非常好的页面,其中详细介绍了 32 位到 64 位的转换以及各种注意事项,如果您有兴趣深入了解这些差异的话。
希望能有所帮助。