2

いくつかのチュートリアルに従って、masm32を学習しています。1つのチュートリアル:http ://win32assembly.online.fr/tut3.html には、次のように記載されています。

LOCALディレクティブは、関数で使用されるローカル変数にスタックからメモリを割り当てます。LOCALディレクティブの束は、PROCディレクティブのすぐ下にある必要があります。LOCALディレクティブの直後に:が続きます。したがって、LOCAL wc:WNDCLASSEXは、wcという名前の変数のWNDCLASSEX構造体のサイズのメモリをスタックから割り当てるようにMASMに指示します。スタック操作に問題なく、コードでwcを参照できます。それは本当に天の恵みだと思います。欠点は、ローカル変数は作成された関数の外部では使用できず、関数が呼び出し元に戻ったときに自動的に破棄されることです。もう1つの欠点は、ローカル変数は動的に割り当てられたスタックメモリであるため、自動的に初期化できないことです。 関数が入力されたとき。LOCALディレクティブの後に、必要な値を手動で割り当てる必要があります。

スタックメモリは静的であり、動的割り当てはヒープであると常に言われてきました。では、C ++の意味で、これらをローカルと見なすことができるでしょうか。C ++でローカル変数を作成する場合、それらの変数もスタックに動的に割り当てられますか?

4

1 に答える 1

3

では、C ++の意味で、これらをローカルと見なすことができるでしょうか。C ++でローカル変数を作成する場合、それらの変数もスタックに動的に割り当てられますか?

C ++では、ローカル(自動)変数はスタック上に存在するため、yesとyesです。

これらは、関数の開始/終了時に出入りするという意味で動的に割り当てられます。ただし、正しく指摘しているように、このタイプの割り当てはヒープ割り当てとはかなり異なります。

ヒープとスタックに加えて、変数が存在できる3番目の領域があります。データセグメントです。これは、グローバル変数と関数レベルおよびクラスレベルのstatic変数が存在する場所です。

于 2012-05-14T20:58:58.843 に答える