Я написал функцию Str::Compare
, которая в основном перезаписывается strcmp
по-другому.
При сравнении двух функций в цикле, повторяющемся 500'000'000 раз, strcmp
выполняется слишком быстро, примерно x750 раз быстрее.
Этот код был скомпилирован в C-библиотеке с активным параметром -Os
:
int Str::Compare(char* String_1, char* String_2)
{
char TempChar_1, TempChar_2;
do
{
TempChar_1 = *String_1++;
TempChar_2 = *String_2++;
} while(TempChar_1 && TempChar_1 == TempChar_2);
return TempChar_1 - TempChar_2;
}
Время выполнения этой функции 3.058s
, а strcmp
только 0.004s
.
Почему это происходит?
Также я реализовал цикл тестирования:
int main()
{
char Xx[] = {"huehuehuehuehuehuehuehuehuehuehuehuehuehue"},
Yy[] = {"huehuehuehuehuehuehuehuehuehuehuehuehuehue"};
for(int i = 0; i < 500000000; ++i)
Str::Compare(Xx, Yy);
}
Edit:
При тестировании кода, который я написал, и оптимизации, которая значительно улучшила скорость Str::Compare
.
Если раньше strcmp
было x750 раз быстрее, теперь только x250. Это новый код:
int Str::Compare(char* String_1, char* String_2)
{
char TempChar_1, TempChar_2, TempChar_3;
while(TempChar_1 && !TempChar_3)
{
TempChar_1 = *String_1++;
TempChar_2 = *String_2++;
TempChar_3 = TempChar_1 ^ TempChar_2;
}
return TempChar_1 - TempChar_2;
}
Новое время выполнения 0.994s
.