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
|