2012-01-24 10 views
0

c/C++では、の異なるデータ型を持つの順序付けはどのようにコードサイズに影響しますか?データ型 - オーダーとコードサイズ

私が見た例では、それぞれ4つの変数を持つ4つの構造体が含まれています。変数はint型、char型、float型、BYTE型です。各構造体は同じ数の変数(すなわち4)を持ち、各構造体で同じ名前が付けられました。唯一の違いは、変数の順序です。

integer、char、floatのサイズが異なる(つまりint 4バイトなど)ことは理解していますが、これらのタイプのレイアウトはどのようにコードサイズに影響しますか?

ありがとうございます!

+0

実行可能ファイルのサイズ、またはメモリ内の構造体のサイズを意味しますか? – mkb

+0

それはパディングのためです....構造は読み込みを最適化するために埋め込まれています...読み込みは常に4バイト(32ビットシステム)なので...いくつかのパディングを追加することで最適化しようとしています...あなたはパディング#pragma macroを使用してください(しかし、パディングができるだけ制限されるようにメンバーを整列させる方が良いでしょう)。 –

+0

@ mkbこの例では、最小のコードサイズしか示していませんか? – user1167501

答えて

0

構造体の埋め込みのためのコンパイラ固有のオプションを使用せずに、大きな要素を構造体の前面に配置して作業を進めてください。私の例では、float、int、BYTE、charの順に並べます。

各タイプには、メモリアライメントが最適です。これは型のサイズ以上になります。コンパイラはこれを管理しますので、大部分の時間を心配する必要はなく、次の要素が最適な配置になるようにパディングを構造体に挿入します。最大から最小の順に進むことで、次の要素がすでに境界にある確率が最大になり、パディングは必要ありません。

+0

ありがとうございました!私は馬鹿だとは思わない。これは構造体に関連していることを理解していますが、この型の整列はクラスの宣言の内側にも適用されます。つまり、実行可能ファイルのサイズに影響しますか? – user1167501

+0

@ user1167501では、C++の構造体とクラスの唯一の違いは、公開アクセス権と公開アクセス権のデフォルトのアクセス権です。実行可能ファイルのサイズへの影響はどちらの場合でも最小限に抑えられます。巨大な配列を作成しているときに唯一認識できるのは、静的な場合にのみ実行可能ファイルの一部になります。 –