El código fuente que encontré para la función strlen en c es el siguiente:
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; } }El enlace es este . No entiendo por qué los pasos son 4. La función salta 4 bytes por 4 bytes sobre la cadena. ¿Por qué lo hace de esta manera? Se podría implementar así:
int strlen(string) char *string; /* String whose length is wanted. */ { register char *p = string; while (1) { if (*p == 0) return p - string; p += 1; } }¿Hay alguna razón relacionada con el rendimiento detrás de esto?
Esto se denomina " desenrollamiento de bucle " y se realiza únicamente por motivos de rendimiento. Los compiladores modernos son perfectamente buenos para desenrollar sus propios bucles, por lo que hacerlo manualmente probablemente perjudique el rendimiento en relación con el código generado por el compilador.