3

答えは簡単なはずですが、確認したかったのです。

sizeof()再帰的ですか?例えば、

struct foo
{
   DWORD a;
   DWORD b;
};

struct bar
{
   DWORD c;
   foo d;
};

sizeof(bar)のサイズを含めて、foo完全な12バイトを返しますか(DWORDが4バイトであると仮定)?

4

3 に答える 3

6

はい、sizeof 演算子は、すべてのメンバーを含む構造体のサイズを示します。

ただし、コンパイラが独自のパディングを追加する場合があるため、実際のサイズは構造体メンバーのサイズの合計と等しい場合と等しくない場合があることに注意してください。

于 2012-06-05T11:25:33.317 に答える
6

はい...sizeofタイプに直接含まれるすべてのメンバーの合計を示します。これには、 struct/classデータメンバー、非仮想ベースクラス、仮想ベースを追跡する実装定義のリンク/カウンター、仮想ディスパッチテーブルポインター、データメンバーの整列に役立つパディングが含まれます。 CPUセーフまたは効率的なアクセスのために、そして理論的には、実装がそこに入れたいと感じるかもしれない他のものは何でも!(たとえば、実行時のデバッグ/エラー検出、ガベージコレクションの非標準サポートなど)

もちろん、ポイントされたオブジェクトや参照されたオブジェクトのサイズは含まれていませんが、それらのポインターと参照のサイズは含まれています。

于 2012-06-05T11:26:13.673 に答える
3

はい、そうです。ISO / IEC 9899:TC3からの抜粋:

構造体または共用体型を持つオペランドに適用すると、結果は、内部パディングと末尾のパディングを含む、そのようなオブジェクトの合計バイト数になります。

(強調鉱山)

于 2012-06-05T11:28:29.780 に答える