首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strstr性能的概率

strstr性能的概率
EN

Stack Overflow用户
提问于 2013-04-05 10:01:09
回答 1查看 478关注 0票数 2

我正在执行我的代码的一些基准测试,我决定使用strstr性能作为参考点。在我的PC机上,扫描~7mb文件(预加载到RAM)的所有文本的性能大约是10 is /秒。

奇怪的是,当我将strstr函数的代码从"C:\Program (X86)\MicrosoftVisualStudio11.0\VC\crt\src\str.c“复制到我的程序时,的执行情况要糟糕得多--大约650 Mb/秒。代码是这样的:

代码语言:javascript
复制
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);

}

编译发行版中的所有代码,所有编译器选项默认,运行时不使用调试器。

这种差异是由于某些编译器选项造成的,还是strstr.c中的代码不是编译后的CRT中使用的真正代码,或者其他什么东西?

UPD我正在使用QueryPerformanceCounter来测量时间。每次测试都重复500次,之后我计算出平均速度并开始下一次测试。(目前我正在比较两个测试-CRT的strstr和复制的strstr2)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-05 11:55:02

Microsoft可能使用在VC\crt\src\intel\strstr.asm中找到的汇编程序版本的VC\crt\src\intel\strstr.asm。在我的系统(VisualStudio10.0)上,内部循环如下所示:

代码语言:javascript
复制
loop_start:
        mov     al,[esi]            ; put next char from str1 into al
        add     esi,1               ; increment pointer in str1
in_loop:
        cmp     al,dl
        je      first_char_found

        test    al,al               ; end of str1?
        jnz     loop_start          ; no, go get another char from str1
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15831066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档