1

簡単な質問があります。関数を呼び出すときにプログラムをコンパイルした後、引数、ローカル変数用のスペース、リターンポイント、および請求されたレジスタを含むコールスタックが生成されることを知っています。

しかし、C++ のようなオブジェクト指向言語では、コンパイラは現在のオブジェクトへの参照をどこに格納するのでしょうか? object->instanceMethod()オブジェクトポインタを引数のようにコールスタックに保存しますか?

私は質問が一般論であることを知っています。答えてくれてありがとう

4

2 に答える 2

3

これは実装定義ですが、実際には、ほとんどの (すべて?) C++ コンパイラが、thisポインターを関数への非表示の最初の引数として渡すコードを生成することがわかります。そのため、メソッド シグネチャで明示的に指定しなくてもアクセスできます。

于 2012-09-14T09:53:03.590 に答える
2

C++ では、メンバー関数が呼び出されると、それが動作するインスタンス (つまりthis、関数内にあるもの) へのポインターが、他の関数の引数/パラメーターと共に暗黙的に渡されます。実際には、異なるシステムは異なる規則を使用するため、そのようなパラメーターのいくつかはレジスターにパックされ、スタックに配置されることはありません (これはより高速になる傾向があります) が、あなたの概念は基本的に健全です。

于 2012-09-14T09:55:11.897 に答える