Почему стандартные строковые функции работают быстрее, чем мои пользовательские строковые функции?

Решил найти скорости 2-х функций:

  • strcmp -Стандартная функция сравнения, определенная в string.h
  • xstrcmp -Функция, которая имеет те же параметры и делает то же самое, просто я ее создал.

Вот моя функция xstrcmp:

int xstrlen(char *str)
{
    int i;
    for(i=0;;i++)
    {
        if(str[i]=='\0')
            break;
    }
    return i;
}

int xstrcmp(char *str1, char *str2)
{
    int i, k;
    if(xstrlen(str1)!=xstrlen(str2))
        return -1;
    k=xstrlen(str1)-1;
    for(i=0;i<=k;i++)
    {
        if(str1[i]!=str2[i])
            return -1;
    }
    return 0;
}

Я не хотел зависеть от strlen, так как я хочу, чтобы все определялось пользователем -.

Итак, я нашел результаты.strcmp делал 364 сравнения в миллисекунду, а мой xstrcmp делал всего 20 сравнений в миллисекунду (по крайней мере на моем компьютере!)

Кто-нибудь может сказать, почему это так? Что делает функция xstrcmp, чтобы сделать себя такой быстрой?

22
задан Brendan Long 17 July 2012 в 04:28
поделиться