このコードで「x」がスタック動的変数であるかヒープ動的変数であるかを説明してください。ヒープ動的である場合、なぜスタック動的変数ではないのですか。ありがとうございます。
function foo(){ MyClass x = new MyClass();}
このコードで「x」がスタック動的変数であるかヒープ動的変数であるかを説明してください。ヒープ動的である場合、なぜスタック動的変数ではないのですか。ありがとうございます。
function foo(){ MyClass x = new MyClass();}
関数を呼び出すと、スタック動的変数が存在します。これらは C++ ランタイム スタックに存在し、一時的なものです。これらは、パラメーター リスト内にあるか、関数内で宣言されています (スタック上でインスタンス化されない static を除く)。これらの変数はスコープ外に出ると消え、その内容のメモリはランタイムによって再利用されます。
ヒープ動的インスタンスは、ランタイムが確保する「ヒープ」と呼ばれるメモリの別の領域に存在します。これらのインスタンスは、経由して発生します。「new」演算子であり、「delete」演算子によって明示的に割り当てを解除する必要があります。
これが役立つことを願っています
これが何の言語なのかわからないので、端的に言うと、これは単なる疑似コードにすぎませんが、一般的な OO 言語のほとんどで概念は同じであるはずです。
これを分解してみましょう:
function foo() {
MyClass x = null;
x = new MyClass();
}
最初の行MyClass x = null
は、ローカル スタックにスペースを割り当てます。参照を保存するのに十分なスペースです。
2 行目x = new MyClass()
はいくつかのことを行います。
MyClass
x
この新しいインスタンスを指すように参照を変更します。簡単な答えは、両方です。
この特定のものは次のとおりです。Dynamic-Heap (ここでは Java でプログラミングしていると仮定しています)。なぜそれがスタックにないのですか?
一般的な指示については、この記事を参照してください: http://www.maxi-pedia.com/what+is+heap+and+stack