yas@is.tsukuba.ac.jp (Yasushi Shinjo) writes:

> はい。ハードウェアのレジスタを叩く時に、書いた通りの順番でな
> いと困るからです。C言語はOSのカーネルを記述するために作ら
> れた言語なので。

精神としてはそういうことでしょうね.どうせポータブルには書けない部分な
んだけど,なるべくstruct定義からメモリ内でのレイアウトが予測できるよう
にして置きたい.すき間のpaddingに関しては,境界に整列しないと動かない
(効率が落ちる)CPUが多いからしょうがないけど,本当の気持ちとしては,そ
の辺もきっちり記述できた方がうれしい(ビットフィールドも).

今の規格では,単に並び順を保証するだけで,すき間は制御できない(コンパ
イルして試してみるしかない)ですけどね.

> 今となっては、標準でコンパイラに構造体の順番の入れ替えを許す
> ことにした方が、最適化が効いていいんでしょうね。キャッシュの
> 関係で、順番を入れ替えたり、意図的に穴をあけたりすると、プロ
> グラムが速くなることがあります。この手の最適化は、CPUに依
> 存するので、本来はプログラマがやる仕事ではありません。コンパ
> イラの仕事です。

飯嶋さんの例にもありましたが,WindowsやX Windowのように,Cで多態もどき
をやりたい時に,先頭の共通部分が同じオフセットに割り付けられないと困り
ませんか?

(C++を使うと,先頭にvtbl_ptrが入っちゃったり…)

                                前田敦司