64 位操作系统是指通用寄存器的位宽。它一次能够处理 64 位(数据 + 操作)。
我们知道,为了让 64 位系统真正有用,程序员需要编写 64 位应用程序。
但是,我想知道 32 位应用程序和 64 位应用程序之间有什么区别?我不是在问编译 64 位应用程序需要进行哪些配置更改;相反,我想知道这两个应用程序在内存中的结构差异。
例如,Linux 上的 C 程序在内存中通常如下所示:
- 文本段
- 初始化数据段
- 未初始化的数据段
- 堆
- 堆
我想 64 位应用程序在内存中的布局结构方面看起来是一样的,除了每个字节的地址(假设字节可寻址系统)有更多位。如果这是真的,那么 64 位意味着什么?只是更大的可寻址内存空间?
另外,在编译 64 位应用程序时,假设源代码中的一条指令被编译为汇编代码中的 add MIPS 指令:
add $1 $2 $1 // $1 += $2;
每条 MIPS 指令都精确编码为 32 位。那么问题来了,如果将应用程序配置为编译为 64 位应用程序,add
指令会是什么样子?它仍然有 32 位还是扩展到 64 位,这违反了 MIPS 规则?如果它仍然是 32 位,我看不出 64 位应用程序有什么不同,以便“充分发挥 64 位操作系统”。
请赐教。