attached is a patch that makes the alignment check in strlen more consistent with the one in memcpy, and hopefully faster.
In src/string/memcpy.c, I find the following:
#define ALIGN (sizeof(size_t)-1)
if (((uintptr_t)d & ALIGN) != ((uintptr_t)s & ALIGN))
goto misaligned;
In src/string/strlen.c, a different check was used instead:
#define ALIGN (sizeof(size_t))
for (; (uintptr_t)s % ALIGN; s++) if (!*s) return s-a;
I do not think there is any particular reason for this difference.
Best,
Jonas