2014-01-10 138 views
-3

32位程序如何能在64位系统中运行?32位程序如何能在64位系统中运行

因为64位系统会有64位内存地址。 但是32位程序会尝试使用32位大小的内存地址。

例)C浪:指针为4字节,所以怎么能储存64位的内存地址(8字节)(如果它在64位系统上运行)

+0

因为它没有在64位系统中运行。它运行在一个运行在64位系统中的32位子系统中。指针仍然是4个字节(32位),并且您仍然有32位CPU寄存器;无法访问该32位应用程序的64位指针或寄存器。 –

回答

2

因为64位指令集架构通常具有向后兼容性的特点?允许运行“传统”32位代码并在模式之间切换。

例如,英特尔处理器以实模式启动,然后操作系统跳入保护模式(基本上是32位),然后操作系统跳入长模式(基本上是64位)。长模式在它用于遗留代码,并且指令编码与以前版本的英特尔处理器兼容。

侧面说明:64位是指在64位机器字,NOT 64位寻址(虽然往往都走到一起)这意味着一个64位处理器的基本整数大小为64位很长,没有别的。在英特尔的情况下,64位指令通常将静态地址(即函数的地址)编码为32位偏移量而不是64位指针。因此,在默认代码模型中,很多生成的代码甚至不会编码我们之前使用32位绝对地址的64位绝对地址。然而,另一方面,这个属性是非常可取的,因为使用相对地址可以更容易地在内存中移动代码,并且不会牺牲使用64位指针或寻址的能力。

相关问题