我的环境是64位win7,VC2010。
当然,intel里面是64位CPU。
我可以在 32 位应用程序中使用 64 位指令/本机机器字(64 位)吗?由于我的大部分代码都是 32 位的,我不想将它移植到 64 位。
对于一些性能关键的热代码,我想通过编译器内在或内联汇编手动优化它(另外64位VC编译器不支持内联汇编),是否可以运行64位代码fox example mov rax, rbx in a 32位模式应用?
其实,你有点可以。用于从 32 位模式切换到 64 位模式的机制(显然必须存在于能够运行 32 位代码的 64 位操作系统上)不受任何保护,并且可以从用户代码中使用。在 Windows 上它被称为天堂之门,它非常简单:只是一个带有 33h 段选择器的远调用。
那么,如何运行 64 位代码呢?
call 33h:your64bitcode
...
your64bitcode:
; do something
retf
当然,您可以通过以这种方式输入的 64 位代码执行的操作存在一些限制,因为您并不是真正处于 64 位进程中。
如果您的应用程序使用 32 位指令集,那么不,您不能选择在同一应用程序中“有时”使用 64 位指令。但是,有一些选项: