C++ 为什么我们要为C++;应用

C++ 为什么我们要为C++;应用,c++,32bit-64bit,C++,32bit 64bit,这是我的一个基本疑问。我不是一个IT或CS的家伙,所以请尝试用简单的语言解释。 我之所以要问这个问题,是因为我们可以在64位和32位操作系统中运行32位应用程序。AFAIK 64位应用程序的数据类型占用的内存是32位应用程序的两倍。此外,64位应用程序只能在64位操作系统上运行。 那么,为什么要费心构建64位应用程序呢? 也许这就是为什么Firefox只有32位版本??? 对不起,如果这个问题不符合标准的话,但我无法控制停止思考同样的问题。 多谢各位 更新:不知何故,似乎有一个混乱。 我不是想问

这是我的一个基本疑问。我不是一个IT或CS的家伙,所以请尝试用简单的语言解释。 我之所以要问这个问题,是因为我们可以在64位和32位操作系统中运行32位应用程序。AFAIK 64位应用程序的数据类型占用的内存是32位应用程序的两倍。此外,64位应用程序只能在64位操作系统上运行。 那么,为什么要费心构建64位应用程序呢? 也许这就是为什么Firefox只有32位版本??? 对不起,如果这个问题不符合标准的话,但我无法控制停止思考同样的问题。 多谢各位

更新:不知何故,似乎有一个混乱。 我不是想问为什么我们需要64位体系结构的机器。 我知道32位机器只能使用4GB内存&64位机器有更高的限制。
我在问为什么我们需要构建64位应用程序

最重要的用例是当您确实想要为您的进程消耗超过2GB的内存时

接下来,32位支持将慢慢下降,就像你现在看不到很多16位应用一样。但这是一个缓慢的过程。目前有一个版本的Windows Server 2008默认情况下不支持32位

最后,有时您必须是64位的,也就是说,当您构建加载到64位使用者进程中的任何类型的扩展时。由于64位进程无法加载32位代码,因此您必须为它们提供64位扩展或设计一个互操作解决方案,以便将代码放在单独的进程中—后者并不总是可行的,有时效率很低。

  • 物理存储器
32位系统体系结构只能直接寻址4 GB地址空间。运行64位版本Windows Server的64位系统体系结构最多可支持1024 GB的物理内存和可寻址内存

  • 更好的并行处理
使用32位体系结构的服务器(Windows OS)限制为32个CPU。并行处理和总线体系结构的改进使64位环境支持多达64个处理器,并通过每个额外的处理器提供几乎线性的可扩展性

  • 更快的总线结构

64位体系结构提供了更多和更广泛的通用寄存器,这有助于提高总体应用程序速度。当有更多的寄存器时,就不需要将持久数据写入内存,然后只需在几条指令后将其读回。在64位环境中,函数调用也更快,因为一次最多可以在寄存器中向函数传递四个参数。

数据类型的大小不会随x64自动加倍,而是处理器寄存器的大小,就像指针大小一样。使用32位,您可以寻址4294967295字节的内存(~4 Gb),这对于某些应用程序(如数据库管理系统等)来说是不够的

由于兼容性问题,Firefox仅提供32位版本。您不能为x86(32位)体系结构编写库并从x64处理器调用它们,因为它们的指针不兼容(如上所述)。同时创建:x64x86版本会增加测试费用。如果您的应用程序很少使用超过3.5 Gb的内存,那么它实际上不会从x64体系结构中获益


此外,32位程序不能简单地在x64体系结构上运行。在Windows上,有一个用于此的层,称为WoW64,用于x64/x86接口。通过各种缓存情况,x86应用程序在WoW上的运行速度也可能比本机x64应用程序的运行速度快。

除了上面给出的明显原因(主要是“使用超过2-3GB的内存”)之外,64位编译的原因是x86-64有16个寄存器,其中x86-32有8个寄存器。由于其中一个寄存器是stackpointer,并且通常为“framepointer”保留
rBP
,因此实际可用的寄存器数分别为6和14。例如,附加寄存器允许在寄存器中传递更多的参数,以及在函数的寄存器中保存更多的临时变量。这对代码的实际执行速度有积极的影响,因为每次使用内存而不是寄存器时,至少会导致更复杂的指令,并且通常会导致必须使用额外的指令。当没有足够的寄存器时,这又会使代码变大

一般来说,64位x86代码在不修改实际算法的情况下运行速度提高了5-15%,并且通常具有更高的性能。有时,可以更改算法以获得更多信息[例如,您可以使用一个按“电话号码”索引的数组,而不是对电话号码进行散列,然后在散列上进行索引,或者使用64位整数值而不是32位整数值,这意味着“一半操作”的加速比为2倍]

如果您需要应用程序的性能,则必须(在多个平台上)进行基准测试。例如,在某些情况下,指针越大,意味着缓存越快被填满,代码运行越慢,因为“只有一半的链表条目适合缓存”


简言之:在大多数情况下,64位应用程序比32位应用程序做同样的事情要快。

是否曾尝试在32位进程中分配150GiB的ram?64位应用程序可以访问更多内存。这对于某些应用程序很重要,而对于其他应用程序则不太重要。@Plasmah什么是GiB?它与千兆字节(GB)有关吗?@Cool\u Coder它可能是“千兆字节”@Cool\u Coder:Emmm。。。我想知道为什么32位服务器只能使用32个CPU?我在这里找到了:这是Windows特有的限制。@老兄,我感谢你的关心和回答,但我想你误解了我的意思。我从未质疑过为什么我们需要64位硬件。我在问我们为什么要开发64位软件。T