+ -
当前位置:首页 → 问答吧 → 关于strlen效率的问题

关于strlen效率的问题

时间:2011-12-12

来源:互联网

在D:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src目录下
找到了strlen.h的实现代码
C/C++ code

size_t __cdecl strlen (
        const char * str
        )
{
        const char *eos = str;

        while( *eos++ ) ;

        return( eos - str - 1 );
}


自己下了个GNU的源代码 找到了里面的strlen函数的代码

当我把这两份代码复制粘贴进入我自己创建的工程里面进行测试的时候 msvc_strlen(MSVC)确实比 gnu_strlen(GNU)要慢

但是两个都比直接调用strlen要慢得多 请问这个是什么原因造成的
PS:在release下测试仍然是这样。。。

作者: Joker____   发布时间: 2011-12-12

给楼主找了篇文章,有空可以看看
http://blog.csdn.net/masefee/article/details/7040012

作者: thefirstz   发布时间: 2011-12-12

一般编译器中,很都会有两套库函库,一套是用标准的C写的,一套是用汇编写的
用标准的C写的,通用性好,便于移植,但效率低
用汇编写的,效率高.但移植性差(如linux的gcc与windows VS的汇编程式是不同的)
对于strlen,当然是用汇编写的效率好些(记得以前讨论过类似的),看上去,汇编代码要长很多,但它用了效率优化(如一次操作4个字节,对32位CPU来说,效率要比4次操作1个字节效率高很多)

作者: keiy   发布时间: 2011-12-12

http://topic.csdn.net/u/20110826/08/3a6b0dff-2850-433c-a002-9f3795a7a1f1.html

给楼主找了个这个。。看看吧C语言版的,效率与自带的strlen相等的,。

作者: mingliang1212   发布时间: 2011-12-12

引用 2 楼 keiy 的回复:

一般编译器中,很都会有两套库函库,一套是用标准的C写的,一套是用汇编写的
用标准的C写的,通用性好,便于移植,但效率低
用汇编写的,效率高.但移植性差(如linux的gcc与windows VS的汇编程式是不同的)
对于strlen,当然是用汇编写的效率好些(记得以前讨论过类似的),看上去,汇编代码要长很多,但它用了效率优化(如一次操作4个字节,对32位CPU来说,效率要比4次操作1个字节……


那我直接调用的strlen就是汇编版本的么?一般什么时候才会用到C版本的库函数呢

作者: Joker____   发布时间: 2011-12-12