64位应用程序:内存中的布局

时间:2013-12-19 10:54:10

标签: assembly 64-bit mips cpu-registers mips64

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

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

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

例如,Linux上的C程序通常在内存中看起来像这样: 1,文本段 2,初始化数据段 3,未初始化的数据段 4,堆 5,堆栈

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

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

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

每个mips指令都以32位编码。所以问题是,如果应用程序配置为编译为64位应用程序,那么add指令会是什么样的?它仍然有32位还是扩展到64位,这打破了mips规则?如果它仍然是32位,我看不出64位应用程序有什么区别,所以它“让64位操作系统充分发挥”。

请赐教。

1 个答案:

答案 0 :(得分:2)

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

64位架构不仅仅是一个"扩展范围"可寻址存储器但也提供新的指令集。由于某些旧指令不适用于64位数据,因此必须创建新的指令来处理。

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

,指令就不正确了