ホームページ > バックエンド開発 > C++ > 3 つの short 整数を含む C 構造体のサイズは 6 バイトですが、整数を追加した同様の構造体のサイズは 12 バイトになるのはなぜですか?

3 つの short 整数を含む C 構造体のサイズは 6 バイトですが、整数を追加した同様の構造体のサイズは 12 バイトになるのはなぜですか?

Linda Hamilton
リリース: 2024-10-26 13:53:02
オリジナル
656 人が閲覧しました

 Why Does a C Structure with 3 Short Integers Have a Size of 6 Bytes, But a Similar Structure with an Integer Added Has a Size of 12 Bytes?

C 構造体のメモリ アライメント

コンピューティングにおいて、メモリ アライメントとは、データをメモリに格納できるアドレスに課される制限を指します。 。コードのパフォーマンスを最適化し、予期しない動作を回避するには、メモリ アライメントを理解することが重要です。

問題ステートメント:

あなたは、メモリ アライメントが通常は行われない 32 ビット システムで作業しています。 4バイトに設定します。次の構造体について考えてみましょう。

<code class="c">typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
} myStruct;</code>
ログイン後にコピー

この構造体には 3 つの 2 バイト フィールドが含まれていますが、sizeof 演算子を使用すると、予期された 8 バイトではなく 6 バイトが返されます。逆に、次の構造体:

<code class="c">typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
    int i;
} myStruct;</code>
ログイン後にコピー

は、フィールド数の増加とパディングの可能性から予想されるように、12 バイトのサイズを返します。結果のサイズに違いがあるのはなぜですか?

説明:

ほとんどのマシンでは、データ型はそのサイズ以下の境界に合わせて配置されます。この場合、short は 2 バイト、int は 4 バイトです。

  • 最初の構造体:

    • すべてのメンバーが 2 であるため、
    • メンバー間にパディングは挿入されないため、合計サイズは 6 バイトになります。
  • 2 番目の構造体:

    • 4 バイトの int が存在する場合、構造体を 4 バイトの境界に揃える必要があります。
    • 2 バイトのパディングは適切な位置合わせを確保するために v3 と i の間に挿入され、合計サイズは 12 バイトになります。

以上が3 つの short 整数を含む C 構造体のサイズは 6 バイトですが、整数を追加した同様の構造体のサイズは 12 バイトになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート