リファレンス マニュアルから明らかなように、s のメモリ レイアウトstruct
は指定されていません(repr
属性が使用されていない場合)。この規則により、コンパイラは、フィールドを並べ替えて構造をより密にパックすることができます。
タプルとタプル構造体のメモリ レイアウトはどうですか? それはどのように(未)指定されており、その理由は何ですか?
リファレンス マニュアルから明らかなように、s のメモリ レイアウトstruct
は指定されていません(repr
属性が使用されていない場合)。この規則により、コンパイラは、フィールドを並べ替えて構造をより密にパックすることができます。
タプルとタプル構造体のメモリ レイアウトはどうですか? それはどのように(未)指定されており、その理由は何ですか?
タプルとタプル構造体のメモリ レイアウトは、通常の構造体のレイアウトと同様に未定義ですが、1 つの例外があります。
これに対する例外は、単位タプル (
()
) です。これは、サイズが 0 でアラインメントが 1 であることが保証されている、サイズがゼロの型として保証されています。
コンパイラは、構造体でできるのと同じ最適化をタプルとタプル構造体で行うことができます。それらの一致も並べ替える必要があります。