構造体のメンバーは、宣言に出現する順序で構造体内に割り当てられ、昇順のアドレスを持ちます。
私は次のジレンマに直面しています: 構造体を宣言する必要があるとき、私は
(1) フィールドを論理的にグループ化する、または
(2) サイズが小さい順に、RAM と ROM のサイズを節約するには?
以下は、最大のデータ メンバーを一番上に配置する必要がある例ですが、論理的に接続された とグループ化する必要もありますcolour
。
struct pixel{
int posX;
int posY;
tLargeType ColourSpaceSecretFormula;
char colourRGB[3];
}
構造体のパディングは非決定論的 (つまり、実装依存) であるため、構造体要素に対してポインター演算を確実に実行することはできません (また、そうすべきではありません: 誰かが自分の好みに合わせてフィールドを並べ替えると想像してみてください: BOOM、コード全体動作を停止します)。
-fpack-structsは gcc でこれを解決しますが、他の制限があるため、コンパイラ オプションは問題外にします。
一方、コードは何よりも読みやすくなければなりません。マイクロ最適化は絶対に避けるべきです。
では、構造体のメンバーが標準によって順序付けられているのはなぜでしょうか。特定の方法で構造体メンバーを順序付けするマイクロ最適化について心配していますか?