使用x86程序集编译为x64时的内存使用情况

时间:2015-07-16 07:00:04

标签: .net windows x86 64-bit .net-assembly

如果我的应用程序是64位应用程序(在64位Windows服务器上)但混合了x86和x64程序集,.net框架的行为如何?它是作为完整的64位应用程序运行的吗?据我所知,x64和x86的内存寻址和cpu指令集不同。

现在的问题是,如果混合使用x64和x86程序集,内存寻址是如何工作的,并且我能够在基于x64的应用程序中使用超过2GB的ram而不仅仅使用x64编译的程序集?

如果问题不清楚或需要进一步的信息,请发表评论。

谢谢!

1 个答案:

答案 0 :(得分:1)

Windows进程可以是32位或64位,它由加载的第一个程序集(您的可执行文件)决定。如果它是 AnyCPU 那么它将在64位系统上为64位,在32位系统上为32位(为简单起见,我省略支持32位,但您可以安全地考虑该标志作为x86的别名,另请参阅What is the purpose of the “Prefer 32-bit”)。

  

现在的问题是,如果混合使用x64和x86程序集,内存寻址是如何工作的,并且我能够在基于x64的应用程序中使用超过2GB的ram而不仅仅使用x64编译的程序集?

64位进程无法加载32位程序集,因此您的问题根本不适用。如果您尝试加载32位程序集,那么您将拥有BadImageFormatException,这就是全部。

此外,当您尝试构建解决方案(将AnyCPU与x86和x64混合)时,您还会收到特定警告MSB3270。