这个函数谁都能很轻松地实现,最土的方法是一个一个检查,我一直认为应该有优化的地方,但至今都没认真思考过,今天突然发现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) |