#ヒープとスタックメモリ

スタックメモリとヒープメモリ


  • :メモリ領域とヒープ領域をスタック
    、一般的にはメモリが来るのコンピュータの参照ランダムアクセスメモリ(RAM) 内部で実行中のすべてのプログラムを。以下に示すようなコンピュータメモリに大別あります。

  • スタックメモリ:プログラムが自動的にオペレーティングシステムの割り当てと回復には適用され、統一流通その後、もはやプログラムが起動拡大することはできませんが、再帰の深さは上限がありますが、決定倍のC / C ++の一般的な再帰的な何千もの下で可能である使用、速いスピード便利な、しかし、プログラマが制御できません割り当てが失敗した場合、スタックオーバーフローエラーを求めます。アドレススタック領域は、成長の方向に減少CONSTローカル変数、スタック領域に格納され、呼び出し元の関数は、ローカル変数有するスタックに存在し、他の情報を
//测试栈内存
#include <iostream>
int main()
{
    int i = 10; //变量i储存在栈区中
    const int i2 = 20;
    int i3 = 30;
    std::cout << &i << " " << &i2 << " " << &i3 << std::endl;
    return 0;
}

テスト出力は次のとおりです。

&I3 <I2&<&Iは、住所の証明が低減されます。


  • ヒープメモリは:システムがアプリケーション・プロセスを受けるオペレーティングシステムのメモリ、に適用するプログラマは、記録されている空きメモリアドレスのリンクリストを横断します、その後、第一の空間検索アプリケーション・ヒープ・スペース・ノード、ノードよりも大きく、フリーリストノードから削除し、宇宙計画にノードを割り当てます。遅く調剤、連続するアドレスを簡単に断片化されていません。また、アプリケーションプログラマは、プログラマもしなければならない責任が破壊それ以外の場合は、メモリリークにつながります。ヒープと呼ばれる新しい/ mallocの割り当てられたスペース使用グローバル変数ヒープに格納されているが、スタックはスタックオーバーフロー上のスタックのリスクを低減することができるアプリケーションの巨大なアレイに配置されている場合と比較して
//测试堆内存和栈内存的区别
#include <iostream>
int main()
{
    int i = 10; //变量i储存在栈区中
    char pc[] = "hello!"; //储存在栈区
    const double cd = 99.2; //储存在栈区
    static long si = 99; //si储存在可读写区,专门用来储存全局变量和静态变量的内存
    int* pi = new int(100); //指针pi指向的内存是在 堆区,专门储存程序运行时分配的内存
    std::cout << &i << " " << &pc << " " << &cd << " " << &si << " " << pi << std::endl;
    delete pi; //需程序员自己释放
    return 0;
}

されたテスト出力:

最初の三つの変数は自動的に、スタック領域に格納されている; Siは、読み取り領域に格納することができる同じであり、&アドレスを見つける複数回PIを実行するにはには、連続していない跳躍指し示さ分布と破壊。

慎重にメモリリーク
のmallocとペア1)は、自由があるはずです。(C ++新しいに対応し、削除)
2)遊離及び機能の外側、同じ層上ではなく、関数のmallocに利用すること。同じコール・レベルでこれらの二つの機能を最大限に活用。
3)メモリのmallocの割り当ては初期化する必要があります。フリーポインタ後にNULLに設定する必要があります。


  • アプリケーションのサイズ制限
    • スタック:スタックがされているWindowsでは、低アドレスに拡張データ構造メモリの連続した領域です。これは、スタック及びスタックアドレスの最大容量が予め設定された基準システムがWindowsであることを意味し、サイズ(典型的には1M / 2M)コンパイラのスタックによって決定される空間は、アプリケーションスタックの残りの空間を超えた場合、あなたはオーバーフローするように求められます。したがって、から得られたスタック上の小さなスペース
    • ヒープ:ヒープがされて上位アドレスに拡張データ構造には、連続していないメモリ領域。システムは不連続な性質のアドレスを格納するための空きメモリのリンクリストで、リストのトラバース方向が低いから高いアドレスにあるためです。ヒープサイズは、コンピュータシステムの有効仮想メモリによって制限されます。したがって、空間利用可能なヒープより柔軟な、比較的大きいです

ヒープとスタック比喩の違いについて:
ヒープとスタックの違いは、ビューのメタファーの前身を参照することができます。

私たちは夕食のためにレストランに行くようにスタックを使用して、ちょうどアラカルト(アプリケーションを発行)、支払い、および(使用)を食べて、供給及び左、野菜、野菜やその他の準備や洗濯料理に関わらず、ポットをスクラブなどモップアップ作業は、彼の利点は、迅速、少し自由です。

ヒープは、DIY、あまりにも多くの問題を食べ物を食べるのが好き、しかし、より自分の好みに合わせて、かつ自由度が大きいようです。

おすすめ

転載: www.cnblogs.com/sstealer/p/11331407.html