strlen 源码
size_t strlen_d(const char *str) { const char *char_ptr; const ulong *longword_ptr; register ulong longword, himagic, lomagic; for (char_ptr = str; ((ulong)char_ptr & (sizeof(ulong) - 1)) != 0; ++char_ptr) { if (*char_ptr == '\0') return char_ptr - str; } longword_ptr = (ulong*)char_ptr; himagic = 0x80808080L; lomagic = 0x01010101L; while (1) { longword = *longword_ptr++; if (((longword - lomagic) & himagic) != 0) { const char *cp = (const char*)(longword_ptr - 1); if (cp[0] == 0) return cp - str; if (cp[1] == 0) return cp - str + 1; if (cp[2] == 0) return cp - str + 2; if (cp[3] == 0) return cp - str + 3; } } }