【问题标题】:What are the lower level advantages and disadvantages of 64-bit/32-bit?64位/32位的低级优缺点是什么?
【发布时间】:2010-11-19 21:54:18
【问题描述】:

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

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

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

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

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

谢谢大家:D

【问题讨论】:

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


【解决方案1】:
  1. CPU 寄存器和内存寻址。

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

【讨论】:

    【解决方案2】:
    • 64 位系统可以直接寻址更多的内存
    • 64 位系统可以处理两倍于 32 位的数据块,这有助于加快某些操作的速度

    对于某些程序,例如办公自动化套件,32 位与 64 位几乎没有明显区别。

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

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

    更多信息请参见32-bit Vs. 64-bit Systems: What's The Difference?

    【讨论】:

    • 32 位机器的硬件可以访问超过 4GB 的内存;任何特定进程都将被限制为“直接”访问小于 4GB 的数据,但在 32 位窗口中不支持超过 4GB 的决定与技术决定一样是营销决定。
    • 当你说“64 位系统可以更快地处理数据”时,我不明白。据我了解,如果您在 32 位系统中,处理器仍会以其数据总线的全宽加载内存页面(进入缓存)。所以本质上,它应该在每次操作中加载 2 倍以上的数据。而且由于操作码和数据更小,相同空间中的容量增加了 2 倍。考虑到内存 I/O 会降低应用程序的速度,32 位系统不是会快一点吗?
    【解决方案3】:

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

    维基百科有an article on 64-bit computing 提供更多详细信息。

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

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

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

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

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

    【讨论】:

      【解决方案4】:

      差别正好是 32 位 ;-)

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

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

      【讨论】:

      • 您的意思是“...在 64 位中存在...”在第一个要点中。
      • 您的回答当然是正确的,但只是一个小评论。英特尔拥有物理地址扩展 (PAE),它具有允许 36 位地址的附加地址线,通过重新安排页表层次结构,可为您提供 64 GB 的虚拟内存空间。这就是为什么您可以在大多数 32 位 Intel 处理器(Pentium Pro 之后)上处理超过 4 GB 的 RAM。
      • 当你说“64 位系统可以更快地处理数据”时,我不明白。据我了解,如果您在 32 位系统中,处理器仍会以其数据总线的全宽加载内存页面(进入缓存)。所以本质上,它应该在每次操作中加载 2 倍以上的数据。而且由于操作码和数据更小,相同空间中的容量增加了 2 倍。考虑到内存 I/O 会降低应用程序的速度,32 位系统不是会快一点吗?
      • @Jeach。我没那么说过。您的意思是对另一个答案发表评论吗?
      • @hirschhornsalz:是的,我在两个答案上粘贴了我的评论......对不起!
      【解决方案5】:

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

      【讨论】:

      • 没有。废话。有许多情况并非如此。 68008 或 8088,它有一个 8 位总线和 32 位或 16 位拱门,或者老式的 pentium/II/III,或 Athlon/XP,它们都具有 64 位主总线,同时是 32 位架构。
      【解决方案6】:

      让我们回到基础。

      如今,99% 的计算机都基于所谓的Von Neumann architecture。本质上,计算机处于以下循环中:

      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)。这只是实现计算机的不同方式

      【讨论】:

        【解决方案7】:

        我认为最好的答案是在 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 位可执行文件使用更多内存。

        【讨论】:

          猜你喜欢
          • 2010-11-09
          • 2010-10-05
          • 2015-04-02
          • 2014-07-31
          • 1970-01-01
          • 2011-12-29
          • 1970-01-01
          • 2011-04-05
          相关资源
          最近更新 更多