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

Memory usage when compiling to x64 with x86 assemblies

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

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

如果问题不清楚或您需要更多信息,请发表评论。

谢谢!

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

Now the question, how does memory addressing works if mixing x64 and x86 assemblies and am i able to use more then 2GB ram in an x64 based application using not only x64 compiled assemblies?

64 位进程无法加载 32 位程序集,因此您的问题根本不适用。如果您尝试加载 32 位程序集,您将得到 BadImageFormatException,仅此而已。

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