byte

ヤマケンさんの comment とか kzk さんの code とか読んでて、以外と知られてない事実なんではないかと思ってみた:
C99 仮想 machine では、char 型の容量こそが byte の定義である。1 byte >= 8 bits であれば、何 bits でもいい (C89 は知らないけど多分一緒でしょう)。
もっと厳密にいうと、byte は "addressing の粒度に等しい*1情報量で、basic character set の文字一つを格納するに足る量 (3.6, 5.2.1)" であり、"sizeof (char) == 1 (6.5.3.4)" 即ち "1 byte == CHAR_BIT bits (6.2.6.1 footnote)" と定義している。sizeof が返すのが byte 数であって (6.5.3.4)、size_t が整数であることから、C の型の幅は全て CHAR_BIT の倍数であることもわかる (6.2.6.1)。CHAR_BIT については、8 以上にしろとあります (5.2.4.2.1)。
故に、sizeof (char) == 1 が保証されているので、malloc (n * sizeof(char)) とかするのはあんまり意味が無い。

*1:3.6 は「〜粒度以上」と解釈できるけど、「以上」の部分は他の記述とあわせると無効。