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)
但是真的是因为这个并且速度差异真的很重要吗?
归档时间: |
|
查看次数: |
160 次 |
最近记录: |