4

このコードで「x」がスタック動的変数であるかヒープ動的変数であるかを説明してください。ヒープ動的である場合、なぜスタック動的変数ではないのですか。ありがとうございます。

function foo(){ MyClass x = new MyClass();}
4

3 に答える 3

7

関数を呼び出すと、スタック動的変数が存在します。これらは C++ ランタイム スタックに存在し、一時的なものです。これらは、パラメーター リスト内にあるか、関数内で宣言されています (スタック上でインスタンス化されない static を除く)。これらの変数はスコープ外に出ると消え、その内容のメモリはランタイムによって再利用されます。

ヒープ動的インスタンスは、ランタイムが確保する「ヒープ」と呼ばれるメモリの別の領域に存在します。これらのインスタンスは、経由して発生します。「new」演算子であり、「delete」演算子によって明示的に割り当てを解除する必要があります。

これが役立つことを願っています

于 2015-12-20T21:43:32.607 に答える
3

これが何の言語なのかわからないので、端的に言うと、これは単なる疑似コードにすぎませんが、一般的な OO 言語のほとんどで概念は同じであるはずです。

これを分解してみましょう:

function foo() {
    MyClass x = null;
    x = new MyClass();
}

最初の行MyClass x = nullは、ローカル スタックにスペースを割り当てます。参照を保存するのに十分なスペースです。

2 行目x = new MyClass()はいくつかのことを行います。

  1. MyClass の新しいインスタンス用にヒープにスペースを割り当てます
  2. の正しいコンストラクターを呼び出しますMyClass
  3. xこの新しいインスタンスを指すように参照を変更します。

簡単な答えは、両方です。

于 2013-01-06T18:38:58.950 に答える
1

この特定のものは次のとおりです。Dynamic-Heap (ここでは Java でプログラミングしていると仮定しています)。なぜそれがスタックにないのですか?

  • これにより、メモリが割り当てられます
  • 自動変数ではありません

一般的な指示については、この記事を参照してください: http://www.maxi-pedia.com/what+is+heap+and+stack

于 2013-01-06T18:29:32.987 に答える