4

64 位操作系统是指通用寄存器的位宽。它一次能够处理 64 位(数据 + 操作)。

我们知道,为了让 64 位系统真正有用,程序员需要编写 64 位应用程序。

但是,我想知道 32 位应用程序和 64 位应用程序之间有什么区别?我不是在问编译 64 位应用程序需要进行哪些配置更改;相反,我想知道这两个应用程序在内存中的结构差异。

例如,Linux 上的 C 程序在内存中通常如下所示:

  1. 文本段
  2. 初始化数据段
  3. 未初始化的数据段

我想 64 位应用程序在内存中的布局结构方面看起来是一样的,除了每个字节的地址(假设字节可寻址系统)有更多位。如果这是真的,那么 64 位意味着什么?只是更大的可寻址内存空间?

另外,在编译 64 位应用程序时,假设源代码中的一条指令被编译为汇编代码中的 add MIPS 指令:

add $1 $2 $1 // $1 += $2;

每条 MIPS 指令都精确编码为 32 位。那么问题来了,如果将应用程序配置为编译为 64 位应用程序,add指令会是什么样子?它仍然有 32 位还是扩展到 64 位,这违反了 MIPS 规则?如果它仍然是 32 位,我看不出 64 位应用程序有什么不同,以便“充分发挥 64 位操作系统”。

请赐教。

4

1 回答 1

3

首先,您用 MIPS 标记了问题,但问的是一般性问题。MIPS 中 64 位应用程序的布局与其他 64 位架构不同。但是布局是事物在内存中的排列方式,而不是您所说的段。这些段只是内存“区域”,几乎所有架构的可执行文件中都有这些段

64 位架构不仅是可寻址存储器的“扩展范围”,而且还提供了新的指令集。因为一些旧指令不适用于 64 位数据,所以它们必须创建新指令来处理。

关于指令,MIPS 64 位仍然使用 32 位指令。如果它扩展到 64 位,那么它会在添加的 32 位中包含什么,而另一个 32 位已经足够(如果不是有些冗余)来表示所有参数。但当然有许多针对 64 位数字的新指令(例如移位超过 31 位或加载/存储双字......)。顺便说一句,如果没有,指令是不正确的,

于 2013-12-19T14:20:59.617 回答