- UID
- 39200
注册时间2007-12-2
阅读权限60
最后登录1970-1-1
亢龙有悔
  
TA的每日心情 | 擦汗 2019-3-1 23:51 |
---|
签到天数: 559 天 [LV.9]以坛为家II
|
本帖最后由 menglv 于 2015-6-4 10:09 编辑
int memfind(char *mem, char *str, int sizem, int sizes)
{
int i=0,j=0;
for (; i < sizem;i++)
{
for (j = 0; j < sizes; j++)
{
if (mem[i+j] != str[j])
break;
}
if (j == sizes)
return i;
}
return -1;
};
我们最优化编译后:
004014A0 /$ 8B4424 0C mov eax, dword ptr [esp+0xC]
004014A4 |. 53 push ebx
004014A5 |. 55 push ebp
004014A6 |. 56 push esi
004014A7 |. 57 push edi
004014A8 |. 33FF xor edi, edi
004014AA |. 85C0 test eax, eax
004014AC |. 7E 2F jle short 004014DD
004014AE |. 8B7424 20 mov esi, dword ptr [esp+0x20]
004014B2 |. 8B6C24 18 mov ebp, dword ptr [esp+0x18]
004014B6 |. 8B4424 14 mov eax, dword ptr [esp+0x14]
004014BA |> 33C9 /xor ecx, ecx ; 主要这里
004014BC |. 85F6 |test esi, esi ; esi并没有改变,但却每次检测
004014BE |. 7E 10 |jle short 004014D0 ; 到这里
004014C0 |. 8D1407 |lea edx, dword ptr [edi+eax]
004014C3 |> 8A1C0A |/mov bl, byte ptr [edx+ecx]
004014C6 |. 3A1C29 ||cmp bl, byte ptr [ecx+ebp]
004014C9 |. 75 05 ||jnz short 004014D0
004014CB |. 41 ||inc ecx
004014CC |. 3BCE ||cmp ecx, esi
004014CE |.^ 7C F3 |\jl short 004014C3
004014D0 |> 3BCE |cmp ecx, esi
004014D2 |. 74 11 |je short 004014E5
004014D4 |. 8B4C24 1C |mov ecx, dword ptr [esp+0x1C]
004014D8 |. 47 |inc edi
004014D9 |. 3BF9 |cmp edi, ecx
004014DB |.^ 7C DD \jl short 004014BA
004014DD |> 5F pop edi
004014DE |. 5E pop esi
004014DF |. 5D pop ebp
004014E0 |. 83C8 FF or eax, 0xFFFFFFFF
004014E3 |. 5B pop ebx
004014E4 |. C3 retn
004014E5 |> 8BC7 mov eax, edi
004014E7 |. 5F pop edi
004014E8 |. 5E pop esi
004014E9 |. 5D pop ebp
004014EA |. 5B pop ebx
004014EB \. C3 retn
004014A0 /$ 8B4424 0C mov eax, dword ptr [esp+0xC]
004014A4 |. 53 push ebx
004014A5 |. 55 push ebp
004014A6 |. 56 push esi
004014A7 |. 57 push edi
004014A8 |. 33FF xor edi, edi
004014AA |. 85C0 test eax, eax
004014AC |. 7E 2F jle short 004014DD
004014AE |. 8B7424 20 mov esi, dword ptr [esp+0x20]
004014B2 |. 8B6C24 18 mov ebp, dword ptr [esp+0x18]
004014B6 |. 8B4424 14 mov eax, dword ptr [esp+0x14]
004014BA 85F6 /test esi, esi ; 我们修改这里
004014BC 7E 12 jle short 004014D0 ; 我们修改这里
004014BE 33C9 |xor ecx, ecx ; 我们修改这里
004014C0 |. 8D1407 |lea edx, dword ptr [edi+eax]
004014C3 |> 8A1C0A |/mov bl, byte ptr [edx+ecx]
004014C6 |. 3A1C29 ||cmp bl, byte ptr [ecx+ebp]
004014C9 |. 75 05 ||jnz short 004014D0
004014CB |. 41 ||inc ecx
004014CC |. 3BCE ||cmp ecx, esi
004014CE |.^ 7C F3 |\jl short 004014C3
004014D0 |> 3BCE |cmp ecx, esi
004014D2 |. 74 11 |je short 004014E5
004014D4 |. 8B4C24 1C |mov ecx, dword ptr [esp+0x1C]
004014D8 |. 47 |inc edi
004014D9 |. 3BF9 |cmp edi, ecx
004014DB ^\7C E1 jl short 004014BE ; 我们修改这里
004014DD |> 5F pop edi
004014DE |. 5E pop esi
004014DF |. 5D pop ebp
004014E0 |. 83C8 FF or eax, 0xFFFFFFFF
004014E3 |. 5B pop ebx
004014E4 |. C3 retn
004014E5 |> 8BC7 mov eax, edi
004014E7 |. 5F pop edi
004014E8 |. 5E pop esi
004014E9 |. 5D pop ebp
004014EA |. 5B pop ebx
004014EB \. C3 retn
速度提高将近1/3。所以说编译器不一定可以将你的程序最优化。
|
|