メモリを占有するのは、aclass
またはobject
? そして、それはその時ですcompile
かexecution
?
ありがとう。
メモリを占有するのは、aclass
またはobject
? そして、それはその時ですcompile
かexecution
?
ありがとう。
コンパイル中、メモリのレイアウトは実装の詳細です。知る必要も気にする必要もありません。
ただし、実行時に... C ++では、クラスは型を定義しますが(クラスへの制限付きイントロスペクションを許可するRTTIをアクティブにしない限り)、通常、それ自体はメモリを占有しません1-それらはオブジェクトの構築と破棄のための単なるフレームワークです. ただし、それらのメソッド(コンストラクタ、デストラクタ、インスタンス メソッド、およびクラス メソッド) は、実行可能メモリの一部を占有しますが、コンパイラは、プログラムで使用されていないそのようなメソッドを最適化できますし、実際に削除します。
型のインスタンス (つまり、変数のようなプリミティブと同様にオブジェクトint
) は、C++ で大量のメモリを占有しますが、それらのメンバー関数についてはクラスを参照します。特定のクラスのインスタンスが使用する正確なメモリ量は、完全に完全に実装の詳細であり、通常は気にする必要はありません。
1それでも、クラス自体はメモリを使用しませんが、関連するstd::typeinfo
インスタンスはメモリを使用します。しかし、繰り返しになりますが、これは一般的に実装に関するものであり、賢明なプログラマーでさえあまり注意を払うようなものではありません。
静的変数、ローカル変数、およびグローバル変数は BBS データ セグメントに格納され、オブジェクトはヒープまたはスタックに格納されます。オブジェクトはクラスのインスタンスですが、クラス定義はコンパイラによって使用され、クラス記述によってオブジェクトが作成されます。クラスは紙に書かれた「自分でテーブルを作る方法」の指示のようなものであり、オブジェクトは指示に従って自分で作成した実際のテーブルであり、実空間を占めます。
はオブジェクトの青写真であるobject instance
ため、実行時にメモリを占有するのはです。class
また、C++ には静的変数、ローカル変数、グローバル変数があり、これらもメモリを占有します。