10

我敢肯定我们都听说过 64 位和 32 位这两个术语,但它们的真正含义是什么?

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

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

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

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

谢谢大家 :D

4

7 回答 7

18

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

Wikipedia 有一篇关于 64 位计算的文章,其中包含更多详细信息。

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

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

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

一个缺点是更宽的数据可能意味着相同数据占用的空间更多。例如存储数字 300 需要九位。如果它存储在 32 位整数中,则浪费了 23 位。在 64 位中,这种浪费变成了 55 位。因此,无需重新工具,简单地重新编译为 64 位可以产生更快但稍微臃肿的软件。

编辑:这里还有64 位技术页面

于 2009-08-15T16:08:12.967 回答
6

区别正好是 32 位 ;-)

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

  • 在 32 位系统中,您只能寻址 4 GiByte (2^32) 内存,在 64 位系统中,理论上限制为 2^64 字节。
  • 64位软件需要稍微多一点内存,主要是指针是8字节而不是4
  • 在 x86_64 上,64 位可执行文件需要更多内存,因为许多指令都有额外的操作码,因此可能运行速度较慢
  • 在 x86_64 上,64 位软件可以使用更多的寄存器并且有可能运行得更快
于 2009-08-15T16:14:37.367 回答
3
  • 64 位系统可以直接寻址更多的内存
  • 64 位系统可以处理两倍于 32 位的数据块,这有助于一些操作更快地进行

对于某些程序,例如办公自动化套件,32 位与 64 位几乎没有可观察到的差异。

但对于其他应用程序,例如数据库、图形/视频处理或托管虚拟机,能够一次访问更多物理内存并能够通过每条指令处理更多信息,可以在性能上产生巨大差异。

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

请参阅32 位对比。64 位系统:有什么区别?更多。

于 2009-08-15T16:08:09.330 回答
2
  1. CPU 寄存器和内存寻址。

  2. 系统可以引用(查看)更多的内存。

于 2009-08-15T16:07:49.800 回答
2

让我们回到基础。

如今,99% 的计算机都基于所谓的冯诺依曼架构。本质上,计算机处于以下循环中:

  1. 从 RAM 中获取命令
  2. 在 CPU 上执行命令

替代文字
(来源:wikimedia.org

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

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

如果您有一个 64 位系统,那么您的地址空间为2^64. 这就是为什么 32 位系统的 RAM 不能超过 4GB。如何处理大于 的内存空间2^32

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

总而言之:64 位架构只是构建计算机的不同方式。这并不意味着它更好或更糟,或者做不同的事情(在低级别上,每台计算机都在执行 fetch-execute)。这只是实现计算机的不同方式

于 2009-08-15T16:39:31.920 回答
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 位可执行文件使用更多内存。

于 2009-08-15T16:43:02.070 回答
-3

确切地说,64 位或 32 位仅指主总线的宽度。

于 2009-08-15T16:18:25.613 回答