Уже не первый раз попадаюсь на утверждение, что strlen() в линуксовом glibc оптимизирована, а у BSD нет. Утверждение “подтверждается” ссылками в соответствующие репозитории:
Посмотрите какой длинный оптимизированный код у glibc и какой обычный тупой у BSD! Вот они, в перевернутом виде:

Появляется еще один аргумент о превосходстве Линукса над BSD! Ура!
И так пока какой-нибудь чел (вроде меня) не полазает по репозиториям и не скажет, что ни та, ни другая версия не используется во многих архитектурах. Достаточно посмотреть, например, в sysdeps/i386/strlen.c в glibc:
size_t
strlen (const char *str)
{
int cnt;
asm("cld\n" /* Search forward. */
/* Some old versions of gas need `repne' instead of `repnz'. */
"repnz\n" /* Look for a zero byte. */
"scasb" /* %0, %1, %3 */ :
"=c" (cnt) : "D" (str), "0" (-1), "a" (0));
return -2 - cnt;
}
и в arch/i386/string/strlen.S в OpenBSD:
ENTRY(strlen)
pushl %edi
movl 8(%esp),%edi /* string address */
cld /* set search forward */
xorl %eax,%eax /* set search for null terminator */
movl $-1,%ecx /* set search for lots of characters */
repne /* search! */
scasb
notl %ecx /* get length by taking complement */
leal -1(%ecx),%eax /* and subtracting one */
popl %edi
ret
или в i386/string/strlen.s в Apple’овской libc (где используется SSE3, тут приводить не буду, кликайте ссылку).
Не повторяйте этот миф, пожалуйста.