编写软件时64位优于32位的优点 如果我有一个C++程序,如HeloWord,然后在32位和64位的机器上编译,我得到两个不同的二进制文件,它们是相同的,但是它们是不同的机器代码,只有32位二进制文件能够在32或64位机器上运行。

编写软件时64位优于32位的优点 如果我有一个C++程序,如HeloWord,然后在32位和64位的机器上编译,我得到两个不同的二进制文件,它们是相同的,但是它们是不同的机器代码,只有32位二进制文件能够在32或64位机器上运行。,c++,c,native,32bit-64bit,C++,C,Native,32bit 64bit,在这两种情况下,我没有任何好处,因为源代码是相同的,它们做的是相同的。这让我想到,一些为32位编写的Linux发行版的所有软件包都可以移植到64位机器上,而无需做任何更改。那么,我得到了什么?有什么好处吗 在C/C++中,是否有一些代码可以在64位中执行,而在32位中无法执行 例如,Google Chrome现在32位不受支持,但64位不受支持。原因可能是什么?64位计算在x64平台上可能比32位计算快。64位程序也可以使用更多的RAM(不受4 Gb的限制)。32位和64位CPU之间有太多的差异

在这两种情况下,我没有任何好处,因为源代码是相同的,它们做的是相同的。这让我想到,一些为32位编写的Linux发行版的所有软件包都可以移植到64位机器上,而无需做任何更改。那么,我得到了什么?有什么好处吗

在C/C++中,是否有一些代码可以在64位中执行,而在32位中无法执行


例如,Google Chrome现在32位不受支持,但64位不受支持。原因可能是什么?

64位计算在x64平台上可能比32位计算快。64位程序也可以使用更多的RAM(不受4 Gb的限制)。

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;
}
#包括
int main(int argc,char*argv[])
{
//这只是为了演示32对64
int*x=(int*)0xFFFFFFFFFFFFFF;
int*y=(int*)0x00000000FFFFFFFF;

std::cout在大多数“重要”程序中,用于数据的内存远远超过用于代码的内存。32位的“Hello World”只需要32位指针、稍微好一点的代码密度等就可以获得好处。但事实上,数据集——以及现在正在讨论的游戏——需要超过4GB的访问限制

今天,你可能连4GB的桌面级显卡都买不到。如果你对集成显卡不满意,你可能不会得到小于8GB的GPU

我们致力于为提供Linux内核和用户区支持,它利用了x86-64 ISA,但基本上使用32位指针;理论上4GB的数据限制对于许多程序来说已经足够了。但是由于代码密度(缓存)的原因,速度优势没有说服力,也没有理由在另一个ABI(和并行库/加载器)中支持它,以及x86-64和IA32 ABI。更不用说代码维护了。成本效益比根本不高

应该注意的是,x86指令编码具有不同的字节长度编码,这在早期RISC体系结构看起来统治世界时被认为是神秘的,但实际上对其有利


这一想法的一个更成功的实现是针对MIPS(RISC)的N32 ABI体系结构。特别是90年代后期的SGI硬件。PowerPC64也可以在32位模式下使用64位指令。但PPC从一开始就设计为可扩展到64位IIRC,即使最初的实现只支持32位ISA


这让我想到,一些为32位编写的Linux发行版的所有软件包都可以移植到64位机器上,而无需做任何更改


事实上,经验恰恰相反。多年来,人们一直对整型大小、指针算法等做出断言,这导致了很多令人头痛的问题。我指的是bug。更强调的是可移植类型(C99的intX\t)当涉及到诸如
long int
之类的问题时,ABI的意识就会出现问题。

@JamesRoot每天访问64位的数据时,我会处理无法将大型成熟应用程序移植到64位的痛苦,原因有很多。与您的“Hello world”不同这个程序包含大约50万行代码,用10年的时间编写。你认为代码可以简单地“移植到64位”是错误的毫无疑问,Chrome只支持其中一个,原因是谷歌不必费心确保它们都能工作。
是否有任何C/C++中的代码示例,我可以用64位完成一些32位无法完成的工作?
没有。所有的计算机架构都是图灵完备的,可以完成其他图灵完备系统所能完成的任何工作如果有足够的时间和记忆,就去做吧