Dra*_*eer 16 c# visual-studio-2012
Any CPU - 首选32位选项有什么作用?
虽然我知道WinRT无法处理exe并且只能运行Windows应用商店应用,但StackOverflow上存在几个问题,它们提出同样的问题并且都引用了这个博客:
在.NET 4.5和Visual Studio 11中,奶酪已被移动.大多数.NET项目的默认设置是AnyCPU,但现在AnyCPU有多个含义.还有一个额外的子类型AnyCPU,"任何CPU 32位首选",这是新的默认值(总体而言,/ platform C#编译器交换机现在有五个选项:x86,Itanium,x64,anycpu和anycpu32bitpreferred ).使用AnyCPU的那种风格时,语义如下:
- 如果进程在32位Windows系统上运行,则它将以32位进程运行.IL被编译为x86机器代码.
- 如果进程在64位Windows系统上运行,则它将以32位进程运行.IL被编译为x86机器代码.
- 如果进程在ARM Windows系统上运行,则它将以32位进程运行.IL编译为ARM机器代码.
但是,购买Surface RT后,我创建了一个Hello World程序,将其设置为Any CPU,检查Prefer 32 Bit标志,编译并将其复制到Surface.当我运行该程序时,操作系统告诉我,它无法运行程序,我应该像任何x86/x64 exe一样关注市场.显示的确切消息是:"此应用程序无法在您的PC上运行.要查找此PC的应用程序,请打开Windows应用商店."
那么这实际上做了什么,是否可以在ARM上为Window RT编译Any CPU应用程序?
Mik*_*ron 16
仅根据您指定的报价,它表明它意味着以下内容:
如果CPU支持32位处理,那么最终的机器代码将是32位(ARM或x86,无所谓).
如果没有,那么机器代码将是64位.
在旧时代,AnyCPU意味着"我与平台无关".这通常意味着您将在64位平台上获得64位,否则将获得32位.
但是,有理由说你甚至可以在64位CPU上使用32位:指针只有一半大小,所以你使用的内存更少; 代码较小,因此更适合缓存等.但是,没有办法强制CLR使用32位,并且在必要的情况下仍然保留64位.
现在,使用AnyCPU - 32位首选,你可以拥有你的蛋糕(必要时支持64位)并吃掉它(如果可能的话,32位支持)
注意:如果我没有记错,Itanium将是一个只支持64位而不是32位代码的平台.其他人可能有也可能没有.
免责声明:我不是专家,这只是我在过去6个月左右阅读过的各种博文