strlen实现
下面是libc 的实现,可以看出它没有一个个字节判断是否遇到了0,而是通过long int long int 跨多个字节判断是否某个字符是0,这样挎着遍历提高了处理速度。
size_t strlen(const char *str)
{
const char *char_ptr;
const unsigned long int *longword_ptr;
unsigned long int longword, magic_bits, himagic,
unsigned long int lomagic;
for(char_ptr = str; ((unsigned long int) char_ptr
& (sizeof (longword) - 1)) != 0; ++char_ptr)
{
if (*char_ptr == '\0')
return char_ptr - str;
}
longword_ptr = (unsigned long int *) char_ptr;
himagic = 0x80808080L;
lomagic = 0x01010101L;
for (;;)
{
longword = *longword_ptr++;
//(longword-lomagic) & himagic
//用来判断是否这个longword中有某个字节是0
if (((longword - lomagic) & himagic) != 0)
{
const char *cp = (const c