C/C++中記憶體模型

來源:互聯網
上載者:User

標籤:

 一直以來,C++中記憶體模型和Java記憶體模型結構就是困擾我的大問題,這在面試中也經常考到。經過長期卓絕地學習,終於得到下面這個最終解決方案:)

 

     C++記憶體分為5個地區(堆棧全常代 ):

 

1. 堆 heap :

                   由new分配的記憶體塊,其釋放編譯器不去管,由我們程式自己控制(一個new對應一個delete)。如果程式員沒有釋放掉,在程式結束時OS會自動回收。涉及的問題:“緩衝區溢位”、“記憶體泄露”

 

2. 棧 stack :

                   是那些編譯器在需要時分配,在不需要時自動清除的儲存區。存放局部變數、函數參數。

                   存放在棧中的資料只在當前函數及下一層函數中有效,一旦函數返回了,這些資料也就自動釋放了。

 

3. 全域/靜態儲存區 (.bss段和.data段) :

                   全域和靜態變數被分配到同一塊記憶體中。在C語言中,未初始化的放在.bss段中,初始化的放在.data段中;在C++裡則不區分了。

 

4. 常量儲存區 (.rodata段) :

                   存放常量,不允許修改(通過非正當手段也可以修改)

 

5. 代碼區 (.text段) :

                   存放代碼(如函數),不允許修改(類似常量儲存區),但可以執行(不同於常量儲存區)

 

 

參考文獻:

1. <系統程式員成長計劃> P22~

2. C++堆、棧、全域/靜態儲存區、常量儲存區http://www.cnitblog.com/guopingleee/archive/2009/02/16/54601.html

3. <程式員的自我修養> P61~   3.3 挖掘SimpleSection.o,但是這裡是介紹的ELF格式目標檔案結構(即檔案在磁碟上的儲存結構),和“記憶體中的結構”還是有區別的,注意區分


C/C++中記憶體模型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.