我敢肯定我们都听说过 64 位和 32 位这两个术语,但它们的真正含义是什么?
我很确定它们与内存地址的大小有关。在 64 位机器上,对对象的引用是 64 位的。但我想更深入地挖掘......
人们经常听到“64 位机器”一词。计算机的哪一部分实际上是针对位数的?处理器?操作系统?
拥有更大的内存地址有什么好处?
我可以添加更多问题,但我认为简短更好。
谢谢大家 :D
我敢肯定我们都听说过 64 位和 32 位这两个术语,但它们的真正含义是什么?
我很确定它们与内存地址的大小有关。在 64 位机器上,对对象的引用是 64 位的。但我想更深入地挖掘......
人们经常听到“64 位机器”一词。计算机的哪一部分实际上是针对位数的?处理器?操作系统?
拥有更大的内存地址有什么好处?
我可以添加更多问题,但我认为简短更好。
谢谢大家 :D
64 位是指寄存器的宽度、内存寻址空间等。一个好处是能够寻址超过 4GB 的内存。
Wikipedia 有一篇关于 64 位计算的文章,其中包含更多详细信息。
编辑:更多内存的优点是操作系统和程序有更多的虚拟寻址空间——16 艾字节(172 亿 GB)——更重要的是,可以将更多的物理内存添加到系统中并进行寻址,从而减少虚拟内存与磁盘的交换。
更宽的寄存器和数据总线的优点是移动相同数量的数据更容易和更快。需要两个或更多寄存器的操作现在可以用一个来完成。
因此,当软件重新编译为 64 位时,性能通常会提高。
一个缺点是更宽的数据可能意味着相同数据占用的空间更多。例如存储数字 300 需要九位。如果它存储在 32 位整数中,则浪费了 23 位。在 64 位中,这种浪费变成了 55 位。因此,无需重新工具,简单地重新编译为 64 位可以产生更快但稍微臃肿的软件。
编辑:这里还有64 位技术页面:
区别正好是 32 位 ;-)
您需要 64 位硬件(处理器)才能运行 64 位操作系统。您需要 64 位操作系统才能运行 64 位软件。这是依赖项。
对于某些程序,例如办公自动化套件,32 位与 64 位几乎没有可观察到的差异。
但对于其他应用程序,例如数据库、图形/视频处理或托管虚拟机,能够一次访问更多物理内存并能够通过每条指令处理更多信息,可以在性能上产生巨大差异。
请注意,今天,许多 32 位芯片具有 64 位扩展功能,因为许多FPU(数学)或SSMD(向量)操作已经在 64 位模式下完成。
请参阅32 位对比。64 位系统:有什么区别?更多。
CPU 寄存器和内存寻址。
系统可以引用(查看)更多的内存。
让我们回到基础。
如今,99% 的计算机都基于所谓的冯诺依曼架构。本质上,计算机处于以下循环中:
(来源:wikimedia.org)
当提到 32/64 位系统(或任何其他位大小)时,本质上您是在谈论计算机的体系结构和实现:
如果您有一个 64 位系统,那么您的地址空间为2^64
. 这就是为什么 32 位系统的 RAM 不能超过 4GB。如何处理大于 的内存空间2^32
?
关于性能差异,没有明确的答案(就像 CISC 或 RISC 架构更好没有明确的答案一样)。这在很大程度上取决于您使用的应用程序。
总而言之:64 位架构只是构建计算机的不同方式。这并不意味着它更好或更糟,或者做不同的事情(在低级别上,每台计算机都在执行 fetch-execute)。这只是实现计算机的不同方式。
我认为最好的答案是在 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 位可执行文件使用更多内存。
确切地说,64 位或 32 位仅指主总线的宽度。