請問大家門誰可以幫忙告訴我堆和堆棧的定義還有他們的區別,我在學習中總是搞不清楚他兩的關系

熱心網友

你好:你學的是C++嗎?你把下面的認真理解一下,應該就可以明白了。在Window中執行的每一個應用程序都有其自己的內存地址。一部分內存空間用于存放程序代碼,一部分內存空間用于存放程序執行期間 創建的變量。創將變量的方法有兩種,一種是在堆中,另外一種則在堆棧里。 理解堆的最好的方法是將它看成一個程序隨時可以使用的內存塊。為了創建堆變量,程序要使用“new”(在C++里)操作符或者 “malloc”(在C中)例程,它們返回指向變量的指針(堆變量總是通過指針來處理和操作)。最后程序用“delete”(在C++里)操作符 或者“free”(在C中)例程來刪除或者釋放內存空間。 而堆棧則不同,它是某個函數被調用后隨時可以創建的一小塊內存,被用于在函數范圍內保存變量(也稱為自動變量)。在函數中,任何 包含在{}內的代碼都有其自己的堆棧。當這個函數或者{}退出時,堆棧以及它包含的所有內容都被摧毀。因此下面的代碼是不運行的: void Myfunction() { int i = 5; { int j = 6; } int k = i+j; } 所以本文問題的答案是:使用堆棧(stack)分配本地或者局域變量的地址空間,而用堆(heap)分配大塊內存地址或者動態創建對象的情形。 例如: void MyFunction() { int i = 5; // 堆棧中的本地(自動)變量 int *iArray; // 堆棧中的本地(自動)變量 iArray = new int[10000]; // 這一行代碼將在堆中創建10000個元素的數組,由iArray指向其地址 for (int k = 0; k < 10000 ; k++) { iArray[k] = k + i; cout << iArray[k] << "\n"; } delete iArray; // 從堆中刪除或釋放數組占用的地址空間,否則將會有內存泄漏 } //函數結束 注意:iArray 不是一個堆變量。它是一個局部指針變量,指向堆中未命名的一個數組 。

熱心網友

在計算機科學中,堆棧(stack)(應該說是棧的定義)是一種特殊的鏈表形式的數據結構,它的特殊之處在于只能允許在鏈表的一端(稱為棧頂,英文為top)進行添加和刪除操作。另外堆棧數據結構的實現也可以通過數組來完成。數據結構中有一章對棧和隊列進行描述,進棧push出棧pop這熟悉吧,這里就是對棧的定義。在計算機科學中,堆是一種特殊的樹形數據結構,每個結點都有一個值。通常我們所說的堆的數據結構,是指二叉堆。堆的特點是根結點的值最?。ɑ蜃畲螅?,且根結點的兩個子樹也是一個堆。 堆排序

熱心網友

堆里面存儲的是具體的對象.堆棧里面的是對象的引用