我正在对我的代码执行一些基准测试,并决定使用strstr
性能作为参考点。在我的 PC 上,扫描 ~7mb 文件(预加载到 RAM)的所有文本的性能约为 10Gb/秒。
奇怪的是,当我将 strstr 函数的代码从“C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\crt\src\strstr.c”复制到我的程序时,它的性能要差得多——大约 650 Mb /秒。代码是这样的:
char * __cdecl strstr2 (
char * str1,
const char * str2
)
{
char *cp = (char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}
在 Release 中编译所有代码,所有编译器选项默认,无需调试器即可运行。
这种差异是由于某些编译器选项,还是代码strstr.c
不是编译 CRT 中使用的真实代码,还是其他原因?
我QueryPerformanceCounter
用来测量时间的 UPD。每个测试重复 500 次,然后我计算平均速度并开始下一个测试。(目前我正在比较 2 个测试 - CRT 的 strstr 和复制的 strstr2)