關於C++使用指標 堆和棧的區別分析

來源:互聯網
上載者:User

資料在記憶體的存放有以下幾種形式

1.棧區--由編譯器自動分配並且釋放,該地區一般存放函數的參數值,局部變數的值等,
2.堆區--一般由程式員分配釋放,如果程式員不釋放,程式結束的時候才會被作業系統回收,
3.寄存器區--用來儲存棧頂指標和指令指標
4.全域去--也是靜態區,全域變數和靜態變數都是儲存在一起的,初始化的全域變數和靜態變數都儲存在一塊,為初始化的全域變數和靜態變數在相鄰的另一個地區,程式結束後由系統釋放。
5.文字常量區--常量字串就是放在這裡的,程式結束後由系統釋放,
6.程式碼區--存放函數的二進位代碼。

函數參數和局部變數存放在棧中,函數運行結束或者返回系統就釋放了他們所佔用的記憶體空間,但是全域變數不會被系統釋放掉。全域的只有在程式結束後才會被系統所釋放,而且由於全域變數被所有的類成員和函數所共用,很容易被修改,為瞭解決這一問題
我們會使用堆

堆棧的區別

1.申請方式的不同

堆是程式員自己申請
而棧則是有程式判斷局部變數或者函數 系統來自動分配

2.系統的響應不同

棧-只要棧的剩餘空間大於所申請的空間,系統將為程式提供記憶體,否則將提示棧溢出 overflow

堆- 系統收到程式中申請的控制項後,會遍曆一個作業系統用來記錄記憶體控制項地址得鏈表,當找到一個空間大於所申請控制項的堆結點後就會將該節點從屬記錄記憶體空閑地址的鏈表中刪除,並將結點的記憶體配置給程式,然後在這塊地區的首地址處記錄分配的大小, 這樣我們在使用delete來釋放記憶體的時候,delete才能正確的識別並刪除該記憶體地區的所有變數,另外我們申請的記憶體空間與堆結點上的記憶體空間不一定相等,這時候系統就會自動將堆結點上的多出來的一部分記憶體空間回收到空閑鏈表中

3、空間的大小不同

棧-在windows狀態下,棧是一塊連續的記憶體的地區,它的大小是2M,也有的說1M,總之這個數值是一編譯的時候就確定的常數,是由系統預先根據棧頂的地址和棧的最大容量定義好的,加入你的資料申請的記憶體空間超過棧的空間,就會提示overflow,所以別指望棧能夠儲存比較大的資料。

堆-堆是不連續的記憶體地區,各塊地區由鏈表將他們串起來,這些串聯起來的記憶體空間叫做堆,他的大小是由系統中虛擬記憶體來定的,因此獲得的空間比較大,而且獲得空間的方式也比較靈活。

4.執行效率的不同

棧-棧由系統自動分配,因此速度比較快,但是程式員不能對其進行操作。
堆-堆是程式員分配的記憶體, 一般速度比較慢,而且容易產生記憶體片段,不過用起來很方便。

5.執行函數的不同

棧-在函數調用的時候,第一個進棧的是被調用函數下一行的記憶體位址,其次是函數的參數,假如參數多餘一個,那麼次序是從左往右,最後才是函數的局部變數。

由於棧的先進後出原則,函數結束時正好相反,先是局部變數先出棧,然後是參數,次序是從左向右,這時所偶的變數都出棧,指標自然的第一個進棧的那行記憶體位址,也就是被調用函數的下一行記憶體位址,程式根據該地址跳轉到調用函數的下一行自動執行。

由於棧的先進後出原則,所以他永遠不可能產生記憶體片段

堆--堆是一大堆不連續的記憶體地區,在系統中由鏈表將他們串聯起來,因此在使用的時候必須由程式員來安排,他的機制是很複雜的,有時候為了分配一塊合適的記憶體,程式員需要按照一定的演算法在堆記憶體中搜尋可用的足夠大的空間,如果沒有滿足條件的空間,那麼就要向記憶體中發出申請一部分記憶體空間,這樣才能有機會分配足夠大的記憶體,然後將計算後的數值返回,顯然堆的運行效率比棧低很多,而且容易產生片段,但是好處是堆可以儲存相當的大的資料,並且一些細節可以由程式員來安排。

以上就是堆棧的區別 但是在應用中的取捨還是具體問題具體分析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.