Я не уверен, насколько быстрым является приведенный ниже код. Если кто-нибудь знает более быстрый / оптимизированный код, чем этот, пожалуйста, дайте мне знать.
int xstrcmp(char *s1, char *s2) { while (*s1 == *s2++) if (*s1++ == 0) return (0); return (*(const unsigned char *)s1 - *(const unsigned char *)(s2-1)); }
Используйте ::strcmp вместо собственной версии, выпущенной вручную. Ваш поставщик компилятора, скорее всего, имеет версию только для сборки, в которой для сравнения используются специфичные для процессора функции (например, в SSE4.2 имеются специальные инструкции для быстрого сравнения строк.) Версия MSVC написана, например, в сборке и использует большие сравнения (целые слова). вместо отдельных символов) в максимально возможной степени в специальном регистре выровненные начало / конец строки (если у вас установлен VS2010, он находится в VC/crt/src/intel/strcmp.asm.)
::strcmp
VC/crt/src/intel/strcmp.asm
Вы измерили, насколько это быстрее, чем strcmp? C strcmp уже должен быть хорошо оптимизирован.
Некоторые другие методы, которые вы могли бы использовать:
Если я проверяю на равенство, иногда я пишу это:
if (a[0]==b[0] && strcmp(a, b)==0){.....
, поэтому он будет вызывать strcmp только в том случае, если первые символы совпадают, чего в большинстве случаев нет.
strcmp