处理字符串的时候,经常需要获得字符串的长度,C标准库提供了strlen这个函数,
实现一个普通的版本并不困难,大致上跟下面的代码类似。
挨个判断字符是否为0,遇到0则退出,代码很简洁,也不算性能低。只是有点不足,
在字长是4字节或者8字节的计算机上,每次只读取一个字节,有些浪费计算机的能力,
如果每次都读取4字节或者8字节,总的读取次数就大大减少,在读取4字节或者8字节
的时候,如果地址不在边界上,机器就要分两次才能读取完成,这样性能将会降低,
弱化优化效果,所以前几个字符必须单独处理,然后从字长边界地址开始,每次读取
4字节或者8字节。
新的方式:
- 开头的几字节单独处理
- 中间部分以4字节或8字节为单位处理
- 最后几字节单独处理