我有一个32位应用程序,我计划在64位Windows 7上运行。
在此阶段,由于依赖于第三方功能,我无法将整个应用程序转换为64位。
但是,我想在我的SSE优化中访问xmm9-xmm15寄存器,并且在执行我的应用程序时也使用64位cpus提供的附加寄存器。
这可以用一些编译器标志来实现吗?
答案 0 :(得分:9)
在我看来,最好的方法是将您的程序划分为多个可执行文件。编译为64位的EXE可以与另一个32位EXE通信,使用您需要的32位第三方DLL。您将在通信中遇到一些开销,并且必须实现依赖进程的启动/停止,但您将拥有清晰的程序体系结构。
如果您开发本机C ++应用程序,您可以实现第二个EXE,例如COM ++进程外对象(LocalServer甚至LocalService)。您可以考虑在C#中实现COM服务器的方法(参见here)。有时这种方式可以简化实现,您可以使用.NET和本机编程的优势。
答案 1 :(得分:3)
是的,你可以。有关具体方法,请参阅this example。
正如克里斯托弗所指出的,这种技术并不总是有效,但为了这个明确的目的,跳进几行手工组装并使用更多寄存器,然后将结果放在某处然后跳回到32位模式,它应该运作得很好。