strlen函数如何在c中工作?

How does strlen function works in c?

我找到的 strlen c 函数的源代码如下:

int
strlen(string)
    char *string;       /* String whose length is wanted. */
{
    register char *p = string;

    while (1) {
    if (p[0] == 0) {
        return p - string;
    }
    if (p[1] == 0) {
        return p + 1 - string;
    }
    if (p[2] == 0) {
        return p + 2 - string;
    }
    if (p[3] == 0) {
        return p + 3 - string;
    }
    p += 4;
    }
}

link 是 this。我不明白为什么步骤是 4。该函数在字符串上跳转 4 个字节 x 4 个字节。为什么会这样?可以这样实现:

int
strlen(string)
    char *string;       /* String whose length is wanted. */
{
    register char *p = string;

    while (1) {
    if (*p == 0)
        return p - string;
    p += 1;
    }
}

是否有任何与性能相关的原因?

这称为“loop unrolling”,纯粹是出于性能原因。现代编译器非常擅长自己展开循环,因此相对于编译器生成的代码而言,手动展开可能会损害性能。