64位/ 32位的低级优缺点是什么?

时间:2009-08-15 16:04:19

标签: 64-bit 32-bit 32bit-64bit

我确信我们都听过64位和32位的条款,但它们究竟是什么意思?

我很确定它们与内存地址的大小有关。在64位机器上,对象的引用是64位。但是我想深入挖掘一下......

  1. 人们常常听到“64位机器”这个短语。计算机的哪一部分实际上是针对位数?处理器?操作系统?

  2. 拥有更大的内存地址有什么好处?

  3. 我可以添加更多问题,但我认为简短更好。

    谢谢你们:D

7 个答案:

答案 0 :(得分:17)

64位是指寄存器的宽度,存储器寻址空间等。一个好处是能够处理超过4GB的内存。

维基百科有an article on 64-bit computing了解更多详情。

编辑:优势更多内存是操作系统和程序具有更多的虚拟寻址空间--16艾字节(172亿GB) - 更重要的是,更多的物理内存可以被添加到系统并进行寻址,导致虚拟内存与磁盘的交换更少。

更宽的寄存器和数据总线的优点是可以更轻松,更快速地移动相同数量的数据。现在可以使用一个操作来完成需要两个或更多寄存器的操作。

因此,当软件重新编译为64位时,性能通常会提高。

缺点是更宽的数据意味着相同数据占用更多空间。例如,存储数字300需要九位。如果它以32位整数存储,则浪费23位。在64位中,该浪费变为55位。因此,在不进行重组的情况下,对64位进行简单的重新编译可以产生更快但更臃肿的软件。

编辑:此处还有 64位技术页

答案 1 :(得分:6)

差别恰好是32位; - )

您需要64位硬件(处理器)才能运行64位操作系统。 您需要一个64位操作系统来运行64位软件。 这是依赖关系。

  • 在32位系统中,您仅限于寻址4 GiByte(2 ^ 32)内存,在64位中,理论上限为2 ^ 64字节。
  • 64位软件需要稍多的内存,主要用于指针是8字节而不是4
  • 在x86_64上,64位可执行文件需要更多内存,因为许多指令都有一个额外的操作码,因此可能运行得更慢
  • 在x86_64上,64位软件可以使用更多寄存器,并且有可能更快地运行

答案 2 :(得分:3)

  • 64位系统可以直接处理更多内存
  • 64位系统可以处理两倍于32位的数据块,这有助于一些操作更快地进行操作

对于某些程序,例如办公自动化套件,32位与64位之间的差别很小。

但是对于其他应用程序,例如数据库,图形/视频处理或托管虚拟机,能够同时访问更多物理内存并能够使用每条指令处理更多信息可能会对性能产生巨大影响。 / p>

请注意,今天,许多32位芯片具有64位扩展功能,因为许多FPU(数学)或SSMD(向量)操作已经在64位模式下完成。

有关详情,请参阅32-bit Vs. 64-bit Systems: What's The Difference?

答案 3 :(得分:2)

  1. CPU寄存器和内存寻址。

  2. 系统可以参考(参见)更多的内存。

答案 4 :(得分:2)

让我们回到基础。

这些天99%的计算机都基于所谓的Von Neumann architecture。从本质上讲,计算机处于一个恒定的循环:

  1. 从RAM
  2. 获取命令
  3. 在CPU上执行命令
  4. alt text
    (来源:wikimedia.org

    当提到32/64位系统(或任何其他位大小)时,基本上你在谈论计算机的架构和实现:

    • 内存空间(RAM)的大小
    • CPU寄存器的大小
    • 总线大小(即CPU,RAM,I / O等之间......)

    如果您使用的是64位系统,则地址空间为2^64。这就是为什么32位系统不能有超过4GB的RAM。如何处理大于2^32的存储空间?

    关于性能差异,没有明确的答案(正如没有明确的答案,如果CISC或RISC架构更好)。它在很大程度上取决于您使用的应用程序。

    总结:64位架构只是构建计算机的另一种方式。这并不意味着它更好,或更糟,或者做不同的事情(在较低的层次上,每台计算机都在执行获取 - 执行)。它只是实现计算机的另一种方式

答案 5 :(得分:2)

我认为最好的答案是在x86位x64汇编程序中进行比较

当你的x32位程序注册一个变量时,例如一个整数(5),代码就等于:

push 5

为了更好地理解事物,'push X'是一个捷径:

sub esp,4 //substracts esp with 4(4*8=32 bits.That's the size of a pointer in x32 executables) in order to make space for our variable
mov [esp],X //moves variable in @esp

这些寄存器是32位(4字节长),这是任何32位编程语言中指针的大小。

在64位代码中,但是大小是两倍大的寄存器。我们的寄存器ESP存在于x64可执行文件中,但它没有广泛使用,因为它在x32可执行文件中。

相反,所有注册表都会在其名称前面显示“R”(EAX变为RAX,ESP变为RSP,EDX变为RDX等等。)

所以我们在x64可执行文件中的代码没有任何不同,除了'push X'的快捷方式将是

sub esp,8
mov [rsp],X

RSP的大小是ESP的两倍--64位,8个字节。

底线是x64位可执行文件比x32位可执行文件使用更多内存。

答案 6 :(得分:-3)

64位或32位参考只是主总线的宽度。