>>746
glibcのソースを見てみたら、同様に可能な限りワード単位で転送していた。
というわけで、>>709は撤回。
NUL文字の検出はすごいねえ。元のソースはアセンブラで書いてあったが、
Cに直してみるとこんな感じ。

/* unsigned longの4バイトのうち1バイトでも0x00があったらTRUE */
int isnul(unsigned long a)
{
unsigned long b = a + 0xfefefeff;
return (a <= b) || (((~a ^ b) & 0x01010100) != 0);
}

ぱっと見では何やってるのかさっぱり分からん。