2 つのパブリック関数 (コンストラクターとデストラクター) のみを持つクラス X を作成しましたsizeof
。演算子を使用すると、クラス サイズは 1 になります。
型のプライベート データ メンバーをchar
上記のクラス宣言に追加すると、サイズは 1 のままです。最後に、整数型をクラス データ メンバーとして追加すると、サイズは 8 バイトになります。
クラスサイズの計算方法を教えてください。
まず、仮想ではない関数はクラスのサイズに影響を与えないことを理解してください。
クラスが空の場合でも、クラスのインスタンスのサイズは少なくとも 1 バイトであるため、オブジェクトが異なればアドレスも異なります。
を追加するchar
と、異なるオブジェクトが異なるアドレスを持つことが保証されるため、コンパイラは人為的にサイズに 1 を追加しません。サイズはsizeof(char)
= 1 です。
次に、を追加しint
ます。これにより、(おそらく) プラットフォームに 4 バイトが追加されます。次に、コンパイラは、パフォーマンス/CPU 要件の理由で整列されるようにクラスをパディングすることを決定し、3 つの空のバイトを追加して、サイズが 1 + 3 + 4 = 8 になるようにします。おそらく、int
メンバーの前にパディングを追加して、これは 4 バイト境界で整列されますが、CPU が必要としない限り、必要ありません。
ウィキペディアのページでパディングについて読むことができます。
C++ のクラスのオブジェクトのサイズを決定する要因は多数あります。これらの要因は次のとおりです。
ここで詳細を見つけることができますhttp://www.cprogramming.com/tutorial/size_of_class_object.html