2

したがって、次のような「構造体」があるとします。

struct Vertex
{
    float posX, posY, posZ;
}

ここで、3 つの float (約 4 バイト) 値を宣言しました。全体として、この「構造体」は約 12 バイトです。

しかし、私が次のように書くと:

struct Vertex
{
    float pos[3];
}

上記と同じ効果が得られますか?12バイト?違いはなんですか?

4

2 に答える 2

2

理論上、最初のケースでは、コンパイラはさまざまなフィールド間にパディングを追加できますが、2 番目のケースでは許可されません (配列は要素の連続したシーケンスでなければなりません)。

したがって、理論的には最初のstruct方がより多くのスペースを必要とする可能性がありますが、実際には、おそらく同じサイズ/メモリ レイアウトになります。

明らかに、最初のケースでは 3 つのメンバーの名前を使用してそのようなデータにアクセスできますが、2 番目のケースではposメンバーに対して配列構文を使用します。

于 2012-12-16T17:36:48.940 に答える
2

1 つの違いを考えることができます:パックが変数のサイズよりも大きい場合、コンパイラは posX、posY、posZ をパディングして、それらを適切に整列させます。バイナリの読み取り/書き込みを行っているときは、せいぜい重要です。

通常、特定のパディングを使用する重大なパフォーマンス上の理由があります。プロセッサにアラインされていないデータを供給すると重大な結果が生じる可能性があるためです。

于 2012-12-16T17:41:14.973 に答える