5

我的环境是64位win7,VC2010。

当然,intel里面是64位CPU。

我可以在 32 位应用程序中使用 64 位指令/本机机器字(64 位)吗?由于我的大部分代码都是 32 位的,我不想将它移植到 64 位。

对于一些性能关键的热代码,我想通过编译器内在或内联汇编手动优化它(另外64位VC编译器不支持内联汇编),是否可以运行64位代码fox example mov rax, rbx in a 32位模式应用?

4

2 回答 2

13

其实,你有点可以。用于从 32 位模式切换到 64 位模式的机制(显然必须存在于能够运行 32 位代码的 64 位操作系统上)不受任何保护,并且可以从用户代码中使用。在 Windows 上它被称为天堂之门,它非常简单:只是一个带有 33h 段选择器的远调用。

那么,如何运行 64 位代码呢?

call 33h:your64bitcode
...
your64bitcode:
; do something
retf

当然,您可以通过以这种方式输入的 64 位代码执行的操作存在一些限制,因为您并不是真正处于 64 位进程中。

于 2013-09-28T09:28:30.337 回答
4

如果您的应用程序使用 32 位指令集,那么不,您不能选择在同一应用程序中“有时”使用 64 位指令。但是,有一些选项:

  • 使用 SIMD 指令,例如 SSE、AVX 等。这在此处记录:http: //msdn.microsoft.com/en-us/library/t467de55 (v=vs.90).aspx
  • 将您的 32 位代码移植到 64 位。或许没那么难?
  • 将您的程序一分为二:一个带有旧代码的 32 位进程和一个带有新代码的 64 位进程。你可以在它们之间映射内存,一个可以启动另一个,所以它有点像一个多线程程序。它是否会表现良好在很大程度上取决于我们目前不知道的细节。
于 2013-09-28T03:35:14.310 回答