比较两个字符串的最佳或最快方法是什么?

时间:2012-02-25 08:01:45

标签: c++ string performance

我不确定以下代码有多快。如果有人知道比这更快/更优化的代码,请告诉我。

int xstrcmp(char *s1, char *s2)
{
  while (*s1 == *s2++)
            if (*s1++ == 0)
                    return (0);
  return (*(const unsigned char *)s1 - *(const unsigned char *)(s2-1));
}

3 个答案:

答案 0 :(得分:16)

使用::strcmp代替您自己的手动滚动版本。您的编译器供应商很可能只使用特定于汇编的版本进行比较(例如,SSE4.2具有快速字符串比较的特殊指令。)例如,MSVC版本以汇编语言编写并使用较大的比较(整个单词)而不是单个字符)尽可能特殊的套管未对齐字符串的开头/结尾(如果你安装了VS2010,它就在VC/crt/src/intel/strcmp.asm。)

答案 1 :(得分:5)

你有没有测量过这比strcmp快多少? C strcmp应该已经很好地优化了。

您可以采取的其他一些方法:

  • 如果您已经知道字符串的长度,请使用memcmp。
  • 通过将字符串重新解释为int32或int64数组,并将余数字符作为字符处理,一次比较4或8个字符。
    • 如果指针指向非4字节或8字节对齐的内存,则可能会出现问题,因此请比较字符直到达到对齐

答案 2 :(得分:3)

如果我正在测试平等,有时我写这个:

if (a[0]==b[0] && strcmp(a, b)==0){.....

所以如果第一个字符匹配,它只会调用strcmp,大多数情况下它们都不匹配。