Jat*_*tin 5 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));
}
Run Code Online (Sandbox Code Playgroud)
Ant*_*eru 16
使用::strcmp而不是您自己的手动滚动版本.您的编译器供应商很可能只使用特定于汇编的版本进行比较(例如,SSE4.2具有快速字符串比较的特殊指令.)例如,MSVC版本以汇编语言编写并使用较大的比较(整个单词)而不是单个字符)尽可能,特殊的套管未对齐字符串的开头/结尾(如果你安装了VS2010,它就在VC/crt/src/intel/strcmp.asm.)
你有没有测量过这比strcmp快多少?C strcmp应该已经很好地优化了.
您可以采取的其他一些方法:
如果我要测试相等性,有时我会这样写:
if (a[0]==b[0] && strcmp(a, b)==0){.....
Run Code Online (Sandbox Code Playgroud)
所以它只会strcmp在第一个字符匹配时调用,大多数情况下它们不匹配。