Re: 構造体のメンバの記憶域の順
yas@is.tsukuba.ac.jp (Yasushi Shinjo) writes:
> はい。ハードウェアのレジスタを叩く時に、書いた通りの順番でな
> いと困るからです。C言語はOSのカーネルを記述するために作ら
> れた言語なので。
精神としてはそういうことでしょうね.どうせポータブルには書けない部分な
んだけど,なるべくstruct定義からメモリ内でのレイアウトが予測できるよう
にして置きたい.すき間のpaddingに関しては,境界に整列しないと動かない
(効率が落ちる)CPUが多いからしょうがないけど,本当の気持ちとしては,そ
の辺もきっちり記述できた方がうれしい(ビットフィールドも).
今の規格では,単に並び順を保証するだけで,すき間は制御できない(コンパ
イルして試してみるしかない)ですけどね.
> 今となっては、標準でコンパイラに構造体の順番の入れ替えを許す
> ことにした方が、最適化が効いていいんでしょうね。キャッシュの
> 関係で、順番を入れ替えたり、意図的に穴をあけたりすると、プロ
> グラムが速くなることがあります。この手の最適化は、CPUに依
> 存するので、本来はプログラマがやる仕事ではありません。コンパ
> イラの仕事です。
飯嶋さんの例にもありましたが,WindowsやX Windowのように,Cで多態もどき
をやりたい時に,先頭の共通部分が同じオフセットに割り付けられないと困り
ませんか?
(C++を使うと,先頭にvtbl_ptrが入っちゃったり…)
前田敦司
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735