- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在运行一个非常简单的程序
static void Main(string[] args)
{
Console.WriteLine(Get4S());
Console.WriteLine(Get4());
}
private static int Get4S()
{
return 4;
}
private static int Get4()
{
int res = 0;
for (int i = 0; i < 4; i++)
{
res++;
}
return res;
}
当它在x86
下工作时,它内联Get4S
方法和Get4
asm代码是:
00000000 push ebp
00000001 mov ebp,esp
00000003 xor eax,eax
00000005 inc eax
00000006 inc eax
00000007 inc eax
00000008 inc eax
00000009 pop ebp
0000000a ret
但是当在 x64 下运行时,我们为 Get4S
方法获得相同的 asm,但是 Get4
asm 根本没有优化:
00000000 xor eax,eax
00000002 xor edx,edx
00000004 inc eax
00000006 inc edx
00000008 cmp edx,4
0000000b jl 0000000000000004
0000000d ret
我假设 x64
JIT 展开循环,然后看到结果可以在编译时计算,并且具有编译时结果的函数将被内联。但它什么也没发生。
为什么 x64
在这种情况下如此愚蠢?..
最佳答案
我明白了。 It's because RyuJIT is used when x64
build is selected, even if .Net 4.5.2
target platform is selected.所以我通过在 App.Config 文件中添加此部分来修复它:
<configuration>
<runtime>
<useLegacyJit enabled="1" />
</runtime>
</configuration>
此标记启用“传统”x64 JIT(在引号中,因为我认为他比“ Shiny 的”RyuJIT 好得多),并且主要方法中的结果 ASM 是:
00000000 sub rsp,28h
00000004 mov ecx,4
00000009 call 000000005EE75870
0000000e mov ecx,4
00000013 call 000000005EE75870
00000018 nop
00000019 add rsp,28h
0000001d ret
这两种方法都是在编译时计算的,并由它们的值内联。
结论:安装.Net 4.6
后,对于CLR4.0
下的所有解决方案,旧的x64 抖动被替换为RyuJIT
。所以关闭它的唯一方法是 useLegacyJit
开关或 COMPLUS_AltJit
环境变量
关于c# - 为什么 x86 JIT 比 x64 更聪明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29509304/
我正在尝试切换(某种)命令。 if 'Who' in line.split()[:3]: Who(line) elif 'Where' in line.split()[:3]: W
基本上我是在一个物理游戏中计算阻力。侧向运动需要减少(如接近 0,而不仅仅是负数),但我不知道它在哪个方向行进,所以我不知道是增加阻力还是减去阻力。 (如果一个项目向右移动,它有正向力,向左移动,负向
我有以下表格 CREATE TABLE Foos ( [Id] INT IDENTITY, -- Other fields ) CREATE TABLE Boos ( [Id]
我正在运行一个非常简单的程序 static void Main(string[] args) { Console.WriteLine(Get4S());
PHP $total_points = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM account WHERE id='$id'"),0
我是一名优秀的程序员,十分优秀!