LINUX.ORG.RU

История изменений

Исправление i-rinat, (текущая версия) :

Судя по коду, ты его из ответа на Stack Overflow скопировал, а ведь там не полный код, а только кусок, который нужно вставить в изначальный код. Поэтому сложно понять, что ты хотел сделать.

Но с большой вероятностью ты прикладываешь образец с шагом в один байт. То есть N*M алгоритм вместо N+M.

В Си программист вызовет strstr(), и это будет работать быстрее. Даже если ты решишь реализовывать алгоритмы руками, отладить код на Си будет проще, причём не придётся заморачиваться с аллокацией регистров — это делает компилятор. На ассемблере ты в жонглировании регистрами закопаешься ещё до того, как получишь рабочий код.

add esp, 8

Такой трюк можно было без проблем использовать во времена 386 и 486, но сейчас это прилично ударит по скорости работы. Процессоры расчитывают, что с данными на стеке ты работаешь или напрямую, или через пары push-pop. Если ты пытаешься push’ить в стек, а потом отматывать через изменение esp, ты ломаешь его уютный закешированный мирок, и вынуждаешь синхронизироваться с памятью. Компиляторы Си это знают, и таких трюков не используют. Вот тебе ещё прирост скорости при использовании компиляторов.

Исходная версия i-rinat, :

Судя по коду, ты его из ответа на Stack Overflow скопировал, а ведь там не полный код, а только кусок, который нужно вставить в изначальный код. Поэтому сложно понять, что ты хотел сделать.

Но с большой вероятностью ты прикладываешь образец с шагом в один байт. То есть N*M алгоритм вместо N+M.

В Си программист вызовет strstr(), и это будет работать быстрее. Даже если ты решишь реализовывать алгоритмы руками, отладить код на Си будет проще, причём не придётся заморачиваться с аллокацией регистров — это делает компилятор. На ассемблере ты в жонглировании регистрами закопаешься ещё до того, как получишь рабочий код.

add esp, 8

Такой трюк можно было без проблем использовать во времена 386 и 486, но сейчас это прилично ударит по скорости работы. Процессоры расчитывают, что данным на стеке ты работаешь или напрямую, или через пары push-pop. Если ты пытаешься push’ить в стек, а потом отматывать через изменение esp, ты ломаешь его уютный закешированный мирок, и вынуждаешь синхронизироваться с памятью. Компиляторы Си это знают, и таких трюков не используют. Вот тебе ещё прирост скорости при использовании компиляторов.