【发布时间】:2011-09-04 05:13:57
【问题描述】:
我正在使用 Visual C++ 2010 开发 32 位 Windows 应用程序。有些东西我真的很想使用内联汇编。但我刚刚意识到,Visual C++ 不支持 64 位应用程序中的内联汇编。所以未来移植到64位是个大问题。
我不知道 64 位应用程序与 32 位应用程序有何不同。未来 32 位应用程序是否有可能全部升级到 64 位?我听说 64 位 CPU 有更多的寄存器。由于性能不是我的应用程序关心的问题,因此使用这些额外的寄存器对我来说不是一个问题。是否还有其他原因需要将 32 位应用程序升级到 64 位?除了 64 位应用程序可能使用 64 位 CPU 独有的寄存器或指令之外,64 位应用程序与 32 位应用程序处理事情是否会有所不同?
我的应用程序需要与其他操作系统组件交互,例如驱动程序,我知道在 64 位 Windows 中必须是 64 位。我的 32 位应用程序会与它们兼容吗?
【问题讨论】:
-
只需将程序集转换为 C++ 即可完成
-
Since performance is not a concern for my applications,那你到底为什么要使用内联汇编呢? -
@Hans Passant:另一个常见的原因是动态创建代码的程序,例如虚拟机运行时/JIT 编译器。他们可以从能够重写代码中受益,如果你不知道以前有哪些代码,这会有点困难。但是编写此类 VM 的人可能不需要问这个问题——“编译器比人类编写更好的程序集”这句话并不真正适用于编写编译器的人;)
-
另见Making assembly function inline in x64 Visual Studio。如果您可以让 Visual Studio 编译器/链接器内联独立 ASM,那么在实践中这并不是什么大损失。也许How to do a naked function and inline assembler in x64 Visual C++.
标签: c++ windows visual-c++ 64-bit inline-assembly