一、內存中的程序:
在進程被載入內存中時,基本上被分成許多小的節,以下是6個主要的節。
低地址 高地址
.text 節
.text節基本上相當於二進制可執行文件的.text部分,它包含了完成程序任務的機器指令。
該節標記為只讀,如果發生寫操作,會造成 segmentation fault。
在進程最初被加載到內存中開始,該節的大小就被固定。
.data 節
.data節用來存儲初始化過的變量
如: int a = 0;
該節的大小在運行時是固定的。
.bss 節
棧下節 (below stack section)用來存儲未初始化的變量
如: int a;
該節的大小在運行時是固定的。
堆 節(空閒存儲器)
堆節(heap section)用來存儲動態分配的變量,位置從低地址向高地址增長。
內存的分配和釋放通過malloc()和free()函數控制。
棧 節
棧節(stack section)用來跟蹤函數調用(可能是遞歸),在大多數系統上從內存的高地址向低地址增長。
環境/參數 節
環境/參數節(environment/ arguments section)用來存儲系統環境變量的一份復制文件,進程在運行時可能需要。
例如,運行中的進程可以通過環境變量來訪問路徑、shell名稱、主機名等信息。該節是可寫的。
命令行參數也保存在該區域中。
二、緩沖區
緩沖區(buffer)是指這樣一個存儲區域:該區域用來接收和保存數據,直至進程對數據進行處理。由於各進程都有緩沖區,
所以保持各進程緩沖區彼此無關是很重要的。通過在進程內存的 .data 和 .bss 節分配內存,可以做到這一點。
三、析構函數
如果類沒有定義自己的析構函數,編譯器會生成默認的析構函數。
默認的析構函數不能刪除在 堆(空閒存儲器)上分配的對象和對象成員。
因此,如果成員占用的空間是在構造函數中動態分配的,就必須自定義析構函數,然後釋放以前分配的內存。
使用C++智能指針,將自動刪除空閒存儲器中不再需要的內存。