Chinaunix首页 | 论坛 | 博客
  • 博客访问: 82832
  • 博文数量: 34
  • 博客积分: 2438
  • 博客等级: 大尉
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-29 09:53
文章分类
文章存档

2010年(34)

我的朋友
最近访客

分类:

2010-06-28 11:23:14

    这个函数谁都能很轻松地实现,最土的方法是一个一个检查,我一直认为应该有优化的地方,但至今都没认真思考过,今天突然发现strlen()的参数不能为NULL,我很奇怪,为什么好多库函数对指针参数不作检查.....

glibc里的strlen的实现:
    步长为long int(即4个或8个字节),(num - 0x01010101) & 0x80808080 =!0 ,这样第8、16、24、32的位都是0的情况就被排除,性能得到提高。
那么是不是任意一个字节上出现0后,都会导致(num - 0x01010101)& 0x80808080非0呢? 答案是肯定的!
magicnum选择最高位为1(0x80808080)和最低位为1(0x01010101),有效地对付了借用的情况。
阅读(667) | 评论(0) | 转发(0) |
0

上一篇:free(ptr)

下一篇:memmove() & memcpy()

给主人留下些什么吧!~~