2011-02-22 37 views
7

在这页,http://www.x86-64.org/pipermail/discuss/2004-August/005020.html 他说有一种方法可以在应用程序中混合使用32位代码和64位代码。他认为应用程序是32位(在兼容模式下),然后切换到64位模式以执行64位代码,反之亦然。是否可以通过模式切换在64位进程中执行32位代码?

假设我的操作系统是64位Linux,而我的应用程序是64位。我做了一个很大的跳转来切换到兼容模式并执行32位代码。当我进行系统调用或函数调用时它能正常工作吗?

兼容模式和64位模式之间是否存在模式切换的开销?我认为其中一个开销是我需要单独的堆栈来处理32位和64位。

我可以将此想法集成到JVM中,也许我可以在64位JVM中动态生成32位代码,并通过模式切换执行它?

+0

如果您使用的是64位JVM,您为什么要生成32位代码?您可以在64位代码中完成所有您想要的(几乎)32位操作;即使在64位模式下,大多数指令也默认为32位操作数。 – 2011-02-22 16:58:51

+1

因为我想比较32位代码和64位代码之间的区别。也许我可以在某些情况下得到不同的结果,例如长类型的大小,或每种情况下的执行时间。 – 2011-02-22 17:36:26

回答

1

开放编码的系统调用应该没问题,因为你的32位代码将使用32位内核入口点。

函数调用当然只能用于其他32位代码。这包括libc - 因此您的32位代码必须是自包含的,否则您将不得不为其所需的库函数提供thunk。请记住,通常不会直接调用系统调用 - 通常您将通过一个libc包装器,它将无法用于您的32位代码。

在模式之间切换确实存在开销。您应该查阅处理器文档以了解它是什么。

相关问题