3

基本的に、私はインターネット上でこれに関する多くの情報を見つけることができませんでしたが、基本的なクラスのインスタンス化は次のとおりであることを理解しています: -> 演算子 new() -> どこかからメモリを割り当てます -> コンストラクター -> 「データ型に値を割り当てます」 "

今、私が知りたいのは、C++ がメンバーではなくクラスのメソッド/関数をどのように割り当てるかということです。私の Web 調査によると、これは new() では発生しません。なぜなら、生のメモリを割り当てるだけだからです。私が得た限りでは、関数を使用してコンストラクターでこれを行う方法を完全には理解できませんでした (むしろ関数ポインターより)。また、キーワード static が存在するため、このキーワードがないと、親クラスの一部として割り当てられると思います。これはどのように、どこで起こりますか?

また、関数がクラスのメモリに含まれている場合、関数 sizeof() はクラスとそのメンバーのサイズだけを示しますか、それとも関連する関数も含まれますか?

4

1 に答える 1

3

コードのコンパイル中、コンパイラは関数の開始点のアドレスを生のコードに格納します。このアドレスは、プログラムの開始位置からの相対アドレスまたは絶対メモリ アドレスにすることができます。

ポイントは、関数がコード内で呼び出されるときです(スコープの問題が処理されていると仮定して)、コンパイラのコンパイル中に、関数のコードが存在するアドレスにジャンプステートメントを挿入するだけです。同じ場所に戻るために、いくつかの別の操作が行われています。

したがって、スペースが割り当てられていると言うと、関数のバイトコードが占めるスペースと、テーブルインコンパイラのエントリに加えて、this function is present at this address

これは、C++.

他の部分sizeof(type)については、基本的にそのメンバーのサイズの集約であるタイプのオブジェクト表現のサイズをバイト単位で返します(最適化のためにコンパイラーによって行われるパディングを除外した場合)。

于 2013-06-28T11:22:20.327 に答える