64位OS是指通用寄存器的位宽。它能够一次处理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位操作系统的性能”。
请赐教。
首先,您用MIPS标记了问题,但提出了一个一般性问题。MIPS中64位应用程序的布局与其他64位体系结构不同。但是布局是事物在内存中的排列方式,而不是您所说的段。这些段只是内存“区域”,几乎所有体系结构的可执行文件中都包含这些段。
64位体系结构不仅是可寻址存储器的“扩展范围”,而且还提供了新的指令集。由于某些旧指令不适用于64位数据,因此它们必须创建新指令来处理。
关于指令,MIPS 64位仍然使用32位指令。如果将其扩展到64位,那么它将在添加的32位中包含什么,而其他32位已经足够(如果不是有点多余)来表示所有参数。但是,当然有许多关于64位数字的新指令(例如,移位超过31位或加载/存储双字...)。顺便说一句,如果没有,
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句