Я читаю «Написать отличный код, том 2», и он показывает следующую реализацию strlen:
int myStrlen( char *s )
{
char *start;
start = s;
while( *s != 0 )
{
++s;
}
return s - start;
}
в книге написано, что такая реализация типична для неопытного программиста на Си. Я программировал на C в течение последних 11 лет, и я не вижу, как написать функцию лучше, чем эта, на C (я могу подумать о написании лучшей вещи на ассемблере). Как можно написать код лучше этого на C? Я просмотрел стандартную библиотечную реализацию функции strlen в glibc и большую ее часть не понял. Где я могу найти более подробную информацию о том, как писать высокооптимизированный код?
strlen()
на ассемблере для системы i386, которая использовала коды операций CPU string (REP) и работала в 6 раз быстрее, чем оптимизированный код C. - person David R Tribble   schedule 05.07.2011register int i;
. - person Bo Persson   schedule 05.07.2011while (*s++ != 0) ;
вместо этого? - person sidyll   schedule 05.07.2011ptrdiff_t
кint
да, вы, вероятно, не передаете строки размером 2 ГБ вstrlen()
, но все же это неаккуратно. Также компилятор может создать лучший код изint i=0; while(s[i]) i++; return i;
, потому что он может больше рассказать о том, что вы делаете с указателем (т.е. он может лучше анализировать этот цикл). - person Spudd86   schedule 06.07.2011