C++中的記憶體管理
1. Linux中程式的記憶體地址分配

其中上面的地址為高位地址,下面的地址為低位地址,下面分別介紹各個記憶體區域的作用:
l 代碼段:存放函式體的二進制代碼;
l Bss段:存放未初始化的全域或靜態資料;
l Data段:存放已初始化的全域或靜態變數;
l 堆區:存放動態申請的記憶體,一般由new和malloc分配;
l 堆疊區:存放函式運行時的區域變數,函式引數,回傳資料,回傳地址等,
2. 堆和堆疊
l 堆疊:在函式呼叫時,第一個入堆疊的為該函式執行完畢后的下一條指令的地址,然后是引數,按從右至左入堆疊,最后是區域變數,這里靜態變數不如堆疊;函式執行完畢后,區域變數先出堆疊,再是引數,最后是該函式執行完畢后的下一條指令地址,
l 堆:作業系統中存在一個記錄堆中空閑記憶體的鏈表,每次動態申請記憶體時,都會去訪問該鏈表,選擇相匹配的記憶體,同時將多余的記憶體還回鏈表,可以知道這樣必然會產生碎片,呼叫delete時,會去訪問動態申請的這塊記憶體首地址記錄的本次動態分配的記憶體大小,從而正確的釋放當前分配的記憶體空間,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/285518.html
標籤:C++
上一篇:經典實驗--電話號碼薄
