ヒープとスタックの違い: 1. ヒープはプロセスの実行中に動的に割り当てられるメモリ セグメントを格納するために使用され、スタックはプログラムによって一時的に作成されたローカル変数を格納するために使用されます。ヒープメモリのサイクル比 スタックメモリは長くなければならない; 3. ヒープメモリはスタックメモリに比べて、コンパイラによる自動解放ができず、ガベージコレクタによってのみ解放できます。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
プログラミング言語には、ヒープとスタックという 2 つの非常に重要な概念があります。
ヒープとスタックは、プログラムを編集するときによく使用される、2 つの非常に重要なデータ構造です。Go 言語も例外ではありません。
これら 2 つのデータ構造を見てみましょう。
スタック
スタックでは、線形テーブルの一方の端にのみデータを入れることができ、データはこの端で取り出されます。 end、つまり、先入れ後出しに従って、後入れ先出しの順序でスタックから要素を削除します。
要素をスタックに入れるプロセスはプッシュと呼ばれます。スタックにプッシュすると、スタック上の要素の数が増加します。スタックに最後に置かれた要素はスタックの一番上にあり、スタックに最初に置かれた要素はスタックの一番下にあります。
スタックから要素を取り出す場合、スタックの先頭からのみ取り出すことができます。要素を取り出すとスタックの番号は小さくなり、最初に入れられた要素が常に取り出されます。最後に入れられた要素が常に取り出されます。最初に取り出されます。
#ヒープ
メモリ割り当てにおけるヒープは、部屋にさまざまな家具を配置するのと似ています。家具のサイズは大きい場合も小さい場合もあるため、メモリを割り当てる場合は、家具を配置する前に、家具を収納できる十分なスペースを確保する必要があります。 家具を置いたり置いたりを繰り返すと、部屋の中の空間が乱雑になってしまいますが、この空間に家具を置くと、十分なスペースがあるのに、それぞれの空間がバラバラになってしまいます。 、家具を置くための連続したスペースがありません。現時点では、メモリ アロケータはこれらのスペースを調整して最適化する必要があります。ヒープ割り当てメモリやスタック割り当てメモリと比較して、ヒープは予測できないサイズのメモリ割り当てに適しています。
スタックとヒープの違いは次のとおりです:
{ } で定義されたローカル変数です。
#ヒープとスタックの割り当て変数の定義が完了すると、通常、変数はヒープおよびスタック スペース はい。どのスペースが存在するかは、動的メモリ割り当て (new/malloc) があるかどうかによって異なります。
たとえば、次のケースです。
ケース 1
var p *int //全局指针变量 func f(){ var i int i = 1 p = &i //全局指针变量指向局部变量i }
ケース 2
func f(){ p := new(int) //局部指针变量,使用new申请的空间 *p = 1 }
最初のケースでは、var を使用してローカル変数を定義していますが、 i の割り当てによる グローバル ポインタ変数 p を指定すると、関数が終了しても i はこの時点では解放されないため、ローカル変数 i がヒープに適用されます (プログラマが手動で解放します)。
ローカル変数: 関数で定義された変数。動的なライフサイクルがあります。実行されるたびに新しいエンティティが作成され、誰も使用しなくなるまで存続します (たとえば、外部ポインター それを指します。関数が終了するときにこの変数にアクセスするパスはありません) この時点で、それが占有するスペースはリサイクルされます[関連する推奨事項:
Go ビデオ チュートリアル以上がGolangのヒープとスタックの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。