ホームページ > バックエンド開発 > Golang > Go 構造体のフィールドの順序が異なるとサイズが異なるのはなぜですか?

Go 構造体のフィールドの順序が異なるとサイズが異なるのはなぜですか?

Susan Sarandon
リリース: 2024-12-05 01:36:10
オリジナル
466 人が閲覧しました

Why Do Different Field Orders in Go Structs Result in Varying Sizes?

フィールドの順序が異なると、構造体のサイズも異なります

1.構造体のサイズ

概要: 構造体のフィールドの順序に応じて、異なる暗黙的なパディングが追加され、そのサイズに影響します。

アーキテクチャが異なると、メモリの配置も異なります。アドレス。たとえば、提供されているコードでは、ターゲット アーキテクチャが 386 で、alignof int64 が 8 バイトであると想定されています。

構造体 A では、最初のフィールドが bool であるため、7 バイトの暗黙的なパディングがあります。 A.a の後に、int64 型の A.b が 8 バイトで整列されたアドレスで始まるようにします。このパディングは、構造体自体が 8 バイトにアライメントされているため必要です。

ただし、構造体 B では、B.a の後に int 型のフィールドが続くため、暗黙的なパディングは 3 バイトのみです。サイズは 4 バイト)、int64 ではありません。

2.サイズゼロの値

Go の仕様では、サイズがゼロより大きいフィールドや要素が含まれていない場合、構造体または配列型のサイズはゼロであると規定されています。

これは、明確なゼロを意味します。サイズ変数はメモリ内で同じアドレスを持つ場合があります。現在の実装はこのルールに従っているため、空の struct struct{} や長さ 0 の配列など、サイズが 0 の型の値にはメモリが割り当てられません。

たとえば、提供されているコードでは、C は次のようになります。サイズゼロの構造体。その結果、C のインスタンスにはメモリが割り当てられません。

以上がGo 構造体のフィールドの順序が異なるとサイズが異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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