根据许多SO答案和这篇被广泛引用的博客文章,为所有选择了'prefer 32-bit'选项的'Any CPU'构建的.NET 4.5应用程序将在32位和64位上作为32位进程运行系统(与.NET 4.0及更早版本不同).换句话说,选择'prefer 32-bit'的x86和AnyCPU是等效的(忽略它是否可以在ARM上运行).
但是,我的测试表明,在64位系统上,"AnyCPU更喜欢32位"应用程序(我确认运行32位)可以分配比x86更多的内存.我编写了一个.NET 4.5 C#控制台应用程序,它在循环中分配10MB字节数组(当然保留引用)直到它遇到OutOfMemoryException,并在具有大量RAM的64位系统上运行它.当构建为x86时,它会分配大约1.2GB.构建为"任何CPU(更喜欢32位)"的相同代码最高可达1.5GB.
为什么不同?