我正在使用Visual C ++ 2010开发32位Windows应用程序。 有一些我真的想要使用内联汇编。 但是我刚刚意识到Visual C ++不支持64位应用程序中的内联汇编。 因此将来移植到64位是一个大问题。
我不知道64位应用程序如何与32位应用程序不同。 将来有没有机会将32位应用程序全部升级到64位? 我听说64位的CPU有更多的寄存器。 由于性能不是我的应用程序的关注,使用这些额外的寄存器不是我所关心的。 还有什么其他的原因,32位应用程序需要升级到64位? 除了64位应用程序可能使用64位CPU专有的寄存器或指令之外,64位应用程序与32位应用程序相比处理事情是否有所不同?
我的应用程序需要与其他操作系统组件进行交互,例如驱动程序,我知道它必须是64位窗口中的64位。 我的32位应用程序是否兼容?
Visual c + +不支持内联汇编为x64模式,因为通常使用内联汇编是一个坏主意。
我想知道是否会有一个机会,32位应用程序将在未来所有必须升级到64位。
这取决于你的目标受众。 如果你的目标是服务器,那么是的,允许用户不要安装WOW64子系统是合理的,因为它是一个服务器 – 你知道它可能不会运行太多的32位代码。 我相信如果将Windows server 2008 R2作为“服务器核心”实例安装,Windows server 2008 R2已经允许这个选项。
由于性能不是我的应用程序的问题,所以使用额外的64位寄存器不是我关心的问题。 还有什么其他的原因,将来一个32位的应用程序必须升级到64位?
64位与寄存器无关。 它与可寻址虚拟内存的大小有关。
除了64位应用程序使用64位CPU独有的寄存器/指令之外,64位应用程序与32位应用程序进程有什么不同?
最有可能的。 32位应用程序受到限制,因为它们不能将超过〜2GB的内容一次映射到内存中。 64位应用程序没有这个问题。 即使不使用超过4GB的物理内存,也能够处理超过4GB的虚拟内存,这有助于将磁盘上的文件映射到内存和类似内存中。
我的应用程序需要与其他操作系统组件进行交互,例如驱动程序,我知道它必须是64位的64位窗口。 我的32位应用程序是否兼容?
这完全取决于你如何与这些司机沟通。 如果是通过“命名文件界面”的东西,那么你的应用程序可以保持为32位。 如果你想做一些像共享内存一样的东西(Yikes!共享内存可以从用户模式下用驱动程序?!?),那么你将不得不把你的应用程序构建为64位。
除了@Billy写的很好,如果你真的觉得需要使用内联64位汇编,那么你可以使用像MASM这样的外部汇编器来完成这个任务 。 (它也可以通过预建脚本加速)。
英特尔C编译器15也具有64位内联功能。 你可以把Visual Studio中的IC作为一个工具集:然后你就可以用内联汇编的VC ++ 64bit。 一个赶上,昂贵的欢呼声