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

时间:2014-01-10 04:11:52

标签: pointers 32bit-64bit

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

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

Ex)C lang:指针是4byte,那么它如何存储64位(8字节)的内存地址?(如果它在64位系统中运行)

1 个答案:

答案 0 :(得分:2)

因为64位指令集体系结构通常具有向后兼容性功能,允许运行“传统”32位代码并在模式之间切换。

例如,英特尔处理器以实模式启动,然后操作系统跳转到保护模式(基本上是32位),然后操作系统跳转到长模式(基本上是64位)。长模式内部有另一种模式用于遗留代码,指令编码与以前版本的英特尔处理器兼容。

旁注: 64位是指64位机器字,而不是64位寻址(尽管通常都是一起)。这意味着64位的基本整数处理器是64位长,没有别的。在Intel的情况下,64位指令通常将静态地址(即函数的地址)编码为32位偏移而不是64位指针。因此,在默认代码模型中,许多生成的代码甚至不会编码我们之前使用32位绝对地址的64位绝对地址。但是,另一方面,这个属性是非常需要的,因为使用相对地址可以更容易地在内存中移动代码,并且不会牺牲使用64位指针或寻址的能力。