2011-01-29 4 views
0

メモリを占有しているのは、classまたはobject?そして、それはcompileまたはexecution時でしょうか?C++クラスとオブジェクト - メモリ

ありがとうございました。

+2

この質問は、(大丈夫、公正ではありません)少し意味がありません。 – delnan

+3

ええ、宿題は忙しいですか? –

+0

class&objectは、最終実行可能ファイルの一部です。それで、あなたはどう思いますか ? – Mahesh

答えて

4

コンパイル時に、メモリのレイアウトは実装の詳細です。あなたは知っているか気にする必要はありません。

しかし、C++では、クラスは型を定義しますが、(あなたがクラスへの限定されたイントロスペクションを可能にするRTTIを有効にしない限り)一般にメモリ自体を占有しません。 - それらは単なるフレームワークです。オブジェクトの構築と破壊。ただし、コンストラクタ、デストラクタ、インスタンスメソッド、およびクラスメソッドは、実行可能メモリの一部を占めますが、コンパイラはプログラムで使用されていないメソッドを最適化できます。

タイプのインスタンス(すなわち、オブジェクトと同様にintのようなプリミティブ)は、C++ではメモリの大部分を占めますが、メンバ関数のためにそれらのクラスを参照します。特定のクラスのインスタンスが使用するメモリの量は、完全に完全に実装されているため、一般的にそれを気にする必要はありません。


それでも、クラス自体は、メモリを使用しませんが、それに関連するstd::typeinfoインスタンスがありません。しかし、やはりこれは一般的には実装上のものであり、プログラマが多くの注意を払うようなものではありません。

+0

静的フィールドは、クラスに属するメモリを占有すると見なすことができます。 –

+0

Vtblsは通常、個々のオブジェクトではなくクラスに関連付けられています。 –

+0

クラスのvtable、静的メンバー、およびメンバ関数は、実行時にメモリを占有します。 –

0

object instanceは、オブジェクトの青写真であるclassであるため、実行時にメモリを占有します。

また、C++には、静的変数、ローカル変数、グローバル変数もあり、それらもメモリを占有しています。

0

静的、ローカルおよびグローバル変数はBBSデータセグメントに格納され、オブジェクトはヒープまたはスタックに格納されます。 オブジェクトはクラスのインスタンスですが、クラス定義はコンパイラによってクラス記述によってオブジェクトを作成するために使用されます。クラスとは、書かれた論文だけを占める「自分でテーブルを作る方法」のようなものですが、オブジェクトは実際の空間を占める指示に従って自分で作った実際のテーブルです。

関連する問題