Kam*_*l T 6 c# x86 assembly micro-optimization .net-native
我正在研究.Net Native编译器执行的优化技术.我创建了一个示例循环:
for (int i = 0; i < 100; i++)
{
Function();
}
Run Code Online (Sandbox Code Playgroud)
我用Native编译了它.然后我.dll用IDA里面的机器代码反汇编了结果文件.结果,我有:
(我删除了一些不必要的行,所以不要担心地址行不一致)
我明白这add esi, 0FFFFFFFFh意味着subtract one from esi and alter Zero Flag if needed,所以如果还没有达到零,我们可以跳到开头.
我不明白的是为什么编译器重新循环?
我得出结论
LOOP:
add esi, 0FFFFFFFFh
jnz LOOP
Run Code Online (Sandbox Code Playgroud)
比例如更快
LOOP:
inc esi
cmp esi, 064h
jl LOOP
Run Code Online (Sandbox Code Playgroud)
但是真的是因为这个并且速度差异真的很重要吗?