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”,纯粹是出于性能原因。现代编译器非常擅长自己展开循环,因此相对于编译器生成的代码而言,手动展开可能会损害性能。
我找到的 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”,纯粹是出于性能原因。现代编译器非常擅长自己展开循环,因此相对于编译器生成的代码而言,手动展开可能会损害性能。