Как ускорить функцию поиска подстроки на C?

Как можно ускорить функцию поиска подстроки в строке (strstr)? Написал исчерпывающее решение (для меня). но оно не ровня библиотечным функциям (по времени выполнения) на linux для C. Сразу скажу, что компилировал с оптимизацией 1, выше поднимался. но время выполнения не менялось и добавил пару аргументов: длина строки и длина подстроки
char* fun_search_c(register char* m_0,int l_0,char* m_1,int l_1)
{
        register char* m=m_0+l_0;
        register int l=0;
        for(;m_0<m;m_0++){
                if(m_0[0]==m_1[0]){
                        for(;m_0<m;m_0++,m_1++,l++){
                                if(m_0[0]!=m_1[0]){
                                        m_0-=l;
                                        m_1-=l;
                                        l=0;
                                        break;
                                }
                                if(l==l_1-1){
                                        return m_0-l;
                                }
                        }
                }
        }
        return 0;
}
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
@Karpion
У меня есть подозрение, что функции работы со строками пишутся на ассемблере и используют команды процессора типа REP SCAS - надеюсь, Вы знаете, что это такое.
Проверить это можно на исходниках библиотек, благо в Linux они доступны.

Навскидку я могу Вам посоветовать заменить m_0[0] на *m_0 - хотя это вряд ли что-то изменит.

И я вообще не понял Вашего алгоритма. Такое ощущение, что Вы зачем-то сравниваете с конца.

И ещё интересно, на каких примерах Вы это тестировали. Есть тонкость - многие алгоритмы поиска подстроки сильно зависят от данных. Если строка набита случайными символами - лучший подход один; если строка содержит повторяющиеся куски - лучший подход немного совсем другой.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
АКМЭ сервис Санкт-Петербург
от 120 000 ₽
Eltex Новосибирск
от 80 000 ₽
Wunder Fund Москва
от 120 000 до 150 000 ₽
28 мая 2020, в 22:27
5000 руб./за проект
28 мая 2020, в 21:46
20000 руб./за проект
28 мая 2020, в 21:42
10000 руб./за проект