如果我的应用程序是64位应用程序(在64位windows服务器上),但混合了x86和x64程序集,那么。net框架的行为如何?它作为一个完整的64位应用程序运行吗?据我所知,x64和x86在内存寻址和cpu指令集上有什么不同吗?
现在的问题是,如果混合x64和x86程序集,内存寻址如何工作,我是否能够在基于x64的应用程序中使用超过2GB的ram,而不仅仅是使用x64编译的程序集?
如果问题不清楚或需要进一步的信息,请评论。
谢谢!
Windows进程可以是32位或64位的,这取决于加载的第一个程序集(可执行文件)。如果它是AnyCPU,那么它在64位系统上是64位,在32位系统上是32位(为了简单起见,我省略了偏好32位,但您可以安全地将该标志视为x86的别名,参见"Prefer 32位"的目的是什么)。
现在的问题是,如果混合x64和x86程序集,内存寻址如何工作,我是否能够在基于x64的应用程序中使用超过2GB的ram,而不仅仅是使用x64编译的程序集?
64位进程不能加载32位程序集,所以你的问题根本不适用。如果你尝试加载一个32位的程序集,你会得到一个BadImageFormatException
,仅此而已。
此外,当你试图构建你的解决方案(混合AnyCPU与x86和x64),你也会得到一个特定的警告MSB3270。