x86和x64是否有不同的.net CLR?
decimal i = 89;
i=i++;
上面的代码是否会在x86,x64上由CLR生成不同的本机代码?
更新 如果是,那么当我在我的机器上安装visual studio时,将安装两个独立于机器位的CLR版本?它有性能吗?
答案 0 :(得分:3)
是的,有一个32位和64位的特定JITter。您的代码将运行在哪一个取决于加载CLR的主机环境/进程和程序集本身。
构建程序集时,您可以选择是否定位x86,x64或“AnyCPU”。
在引入此设施之前,还有一个“遗留”组件的案例。我相信它们的行为与32位行为相同。
请注意,如果程序集具有任何32位本机依赖项,那么您还应将其标记为32位,否则它将在64位环境中以64位形式加载,并且依赖项将无法加载。 / p>
要回答您更新的问题:
64位计算机将同时安装32位和64位CLR。在WOW64下运行32位程序集需要32位。 (例如,Visual Studio是32位!)
32位有时可以运行得更快,因为指针较小,因此浪费的缓存/内存较少。另一方面,64位模式有更多寄存器可供JITter使用。这取决于代码的特征。