|
发表于 2017-7-8 15:18:49
|
显示全部楼层
Visual Studio 2017 下,开O1优化
- #include <stdio.h>
- #include <stdlib.h>
- int main(void)
- {
- long i;
- for(i = 0; i < 0xffffff; i++)
- printf("%ld ", i);
- return 0;
- }
复制代码
- #include <stdio.h>
- #include <stdlib.h>
- int main(void)
- {
- 00EC182D push esi
- register long i;
- for(i = 0; i < 0xffffff; i++)
- 00EC182E xor esi,esi
- printf("%ld ", i);
- 00EC1830 push esi
- 00EC1831 push offset string "%ld " (0EC5B38h)
- 00EC1836 call _printf (0EC127Bh)
- 00EC183B inc esi
- 00EC183C pop ecx
- 00EC183D pop ecx
- 00EC183E cmp esi,0FFFFFFh
- 00EC1844 jl main+3h (0EC1830h)
- return 0;
- 00EC1846 xor eax,eax
- 00EC1848 pop esi
- }
- 00EC1849 ret
复制代码
很明显,使用esi寄存器代替了变量i
不过,我发现即使去掉register关键字,照样使用寄存器,所以优化才是关键
- #include <stdio.h>
- #include <stdlib.h>
- int main(void)
- {
- long i;
- for(i = 0; i < 0xffffff; i++)
- printf("%ld ", i);
- return 0;
- }
复制代码
- #include <stdio.h>
- #include <stdlib.h>
- int main(void)
- {
- 009F182D push esi
- long i;
- for(i = 0; i < 0xffffff; i++)
- 009F182E xor esi,esi
- printf("%ld ", i);
- 009F1830 push esi
- 009F1831 push offset string "%ld " (09F5B38h)
- 009F1836 call _printf (09F127Bh)
- 009F183B inc esi
- 009F183C pop ecx
- 009F183D pop ecx
- 009F183E cmp esi,0FFFFFFh
- 009F1844 jl main+3h (09F1830h)
- return 0;
- 009F1846 xor eax,eax
- 009F1848 pop esi
- }
- 009F1849 ret
复制代码 |
|