strlen源码剖析
学习高效编程的有效途径之一就是阅读高手写的源代码,CRT(C/C++ Runtime Library)作为底层的函数库,实现必然高效。恰好手中就有glibc和VC的CRT源代码,于是挑了一个相对简单的函数strlen研究了一下,并对各种实现作了简单的效率测试。
strlen的函数原形如下:
size_t strlen(const char *str);
strlen返回str中字符的个数,其中str为一个以' '结尾的字符串(a null-terminated string)。
1. 简单实现
如果不管效率,最简单的实现只需要4行代码:
1 size_t strlen_a(const char * str) {
2 size_t length = 0 ;
3 while (*str++ )
4 ++ length;
5 return length;
6 }
2 size_t length = 0 ;
3 while (*str++ )
4 ++ length;
5 return length;
6 }
也许可以稍加改进如下:
1 size_t strlen_b(const char * str) {
2 const char *cp = str;
3 while (*cp++ )
4 ;
5 return (cp - str - 1 );
6 }
2 const char *cp = str;
3 while (*cp++ )
4 ;
5 return (cp - str - 1 );
6 }
后续高端部分:http://www.cppblog.com/ant/archive/2007/10/12/32886.html