C++ヒープ(Heap)とスタック(Stack)の違い

3054 ワード

参考サイト:https://www.cnblogs.com/ChenZhongzhou/p/5685537.html
参考サイト:http://www.cnblogs.com/SinSay/archive/2008/11/12/1332076.html
重点的に強調したのは、
  • データ構造のスタックとスタック
  • 1.データ構造中のスタックについて:連続的に保存するデータ構造について、先進的に後出して、通常は入スタック、出スタックなどの操作を使って、もしその中の1つの要素を読み取るならば、前の要素を全部取り出して出スタックしなければならない.類比と現実の箱.
    2.スタックの場合:非連続ストレージ構造では、各ノードに値があり、ツリー全体が配列されています.ルートノードの値が最大(または最小)であり、ルートノードの2つのサブツリーもスタックであることが特徴です.優先キューを実現し、アクセスが自由になることがよくあります.
  • メモリ内のスタックとスタック
  • 一般的にメモリとは、コンピュータのランダムメモリ(RAM)を指し、プログラムがここで実行される.大まかな分類:
    C++堆(Heap)和栈(Stack)的区别_第1张图片
    スタックメモリ:プログラムが自動的に割り当てられ、解放され、回収され、速度が速く、使用が便利で、プログラマが制御できない(割り当ての場所が異なる場合がある).割り当てに失敗すると、プロンプトスタックがオーバーフローします.注:constローカル変数もスタック領域に格納されます.スタック領域はアドレスが減少する方向に増加する.
    //     
    #include 
    int main()
    {
        int i = 10; //  i      
        const int i2 = 20; //       
        int i3 = 30;
        std::cout << &i << " " << &i2 << " " << &i3 << std::endl;
        return 0;
    }

    テスト結果:&i

    ≪ヒープ・メモリ|Heap Memory|emdw≫:プログラマはオペレーティング・システムにメモリを申請します.システムがプログラム申請を受信すると、空きメモリを記録するチェーン表を巡り、申請スペースより大きい最初のヒープ・ノードを探し、そのノードを空きノードから削除し、プログラムに割り当てます.割り当ての速度が遅く、割り当てが不連続で、断片化しやすい.また、プログラマーが申請する場合は、プログラマーが破棄する必要があります.そうしないと、メモリの漏洩が発生します.
    //            
    #include 
    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          ,              
    
    	int* pi2 = new int[5];//        ,     
    	for(int j=0;j<5;j++)  //     
    		pi2[j] =j;
    
    	
    	std::cout<

    C++堆(Heap)和栈(Stack)的区别_第2张图片
    実行複数回発見:piが指すアドレスは連続せず、ジャンプであり、一次元スタック変数は全体的にジャンプし、小さな全体として理解できる(アドレスはスタックとは逆に、スタックはアドレスが減少し、スタックの中はアドレスが増加する).&siは一致しており、読み取り可能な書き込み領域に格納されています.最初の3つの変数はスタック内にあり、プログラムは自動的に割り当てられ、破棄されますが、スタックに格納されている変数はプログラマーが自分で破棄する必要があります.
    スタックとスタックの比喩について
    スタックとスタックの違いは、ある先輩の比喩を引用して見ることができます.
    宿を使うのは私たちがレストランで食事をするのと同じで、料理を注文して(申請を出して)、お金を払って、食べて(使用して)、満腹になったら行って、野菜を切って、料理を洗うなどの準備と茶碗を洗って、鍋を洗うなどの掃除の仕事を気にする必要はありません.彼のメリットは速いですが、自由度は小さいです.
    山を使うのは自分で好きな料理を作るようなもので、面倒ですが、自分の好みに合っていて、自由度が高いです.