在技​​术演讲中,为什么你不能在32位操作系统上运行64位应用程序?

2 clr 64-bit

从技术角度来说,我需要一些帮助来描述为什么64位应用程序在32位机器上的Windows 32位中提示"不是有效的Win32应用程序"?任何MSDN参考都非常欣赏它(我不能谷歌一个可靠的来源).我知道它不应该运行,但我对此没有很好的解释.

Meh*_*ari 13

32位操作系统以32位保护模式运行.64位操作系统以长模式运行(即64位保护模式).64位指令(由64位程序使用)仅在CPU处于长模式时可用; 所以你不能在32位操作系统运行的32位保护模式下执行它们.

(以上声明适用于x86架构)

顺便说一句,"不是一个有效的Win32应用程序"错误消息的原因是64位可执行文件以PE32 +格式存储,而32位可执行文件以PE32格式存储.PE32 +文件不是32位Windows的有效可执行文件.它无法理解这种格式.


Jef*_*and 7

以更低级和更详细的方式扩展其他人所说的内容:

编译程序时,将为特定的处理器指令集编写指令.我们所看到的"x = y + z"通常等于将一个值复制到寄存器中,将add命令与另一个值的内存位置一起传递等等.

特定于这一个问题,64位应用程序期望64位地址空间可以使用.在32位系统中将命令传递给处理器时,它会同时处理这32位数据.

这一切的意义?如果没有创造力,32位系统上的内存不能超过4千兆字节(2 32).可以在单个操作中完成一些需要多个操作的任务(比如,处理数字> 40亿无符号的简单数学).更大,更快,但需要与旧系统断开兼容性.