質問

次の2つのタイプがなぜなのか疑問に思っています

struct {
    double re[2];
};

and

double re[2];

Cでも同じサイズですか?構造体はサイズのオーバーヘッドを少し追加しませんか?

役に立ちましたか?

解決

いいえ、すべての要素を1つの上位要素に構成するだけで、そのサイズは単に個々の要素のサイズが加算されただけです(さらに、配置規則に応じてパディングが行われますが、これはこの質問の範囲外です)。 / p>

他のヒント

それが助けになるかどうか-いいえ。 Cはペストのようなオーバーヘッドを回避します。具体的には、このコンテキストでのオーバーヘッドを回避します。

異なる構造を使用した場合、違いが生じる可能性があります:

struct space_filled
{
    char       part0;
    double     part1;
};

マシンで double を8バイト境界に揃える必要がある場合(および sizeof(double)== 8 。これは標準ですが、標準では義務付けられていません) )、構造が16バイトを占めることがわかります。

いいえ、構造体は何も追加する必要はありません。 CやC ++では、クラス(および構造体)が他の多くの責任を負うJavaや.NETとは異なり、これらは単に多くのデータメンバーを保持するために使用されるコンテナです。 C ++では、仮想関数呼び出しが存在する場合、それらを解決するためにvtableを保存する必要がありますが、一般に、構造体自体にはオーバーヘッドがありません。

唯一の例外はこれです:

typedef struct {} empty;
assert(sizeof(empty) > 0);

空の構造体のサイズはゼロではありません 。すべてのオブジェクトには一意のアドレスが必要なため、構造体のサイズはゼロ以外の some である必要があります。 (そうでなければ、これらの構造体の配列を作成することはできません)

いいえ。 Structはサイズを追加したり、コンパイルされたCにオーバーヘッドを追加したりしません。

これは、コンパイラーによる追加作業が必要な構文のレイヤーですが、実行時のオーバーヘッドはありません。

Cは非常に「裸」です。必要な場合を除き、何も存在しないことを意味します。 そこで、「構造体が必要とするオーバーヘッドはどれくらいですか?」と自問してみてください。

いいえ、そうではありません。

これは構造体の優れた点の1つです(古い学校のTCP / IPプログラミングで非常に役立つ理由)。

メモリ/バッファレイアウトを表すのに良い方法です。

Cの構造体型は、メモリ内のメンバーを順番にレイアウトするだけです

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top