一、為什麼進行內存空間的分配
在任何程序設計環境及語言中,內存管理都十分重要。在目前的計算機系統或嵌入式系統中,內存資源仍然是有限的。因此在程序設計中,有效地管理內存資源是程序員首先考慮的問題。
二、進程虛擬地址空間的分類和空間示意圖
棧區—由編譯器自動分配釋放,存放函數形參,局部變量和自動變量堆區—用於分配由malloc、realloc、calloc分配的空間
數據區—該區又分為bss段,rodata段和data段:bss段—保存未初始化或者初始化為0的全局變量
rodata段—用於保存常量data段(靜態數據區)—保存初始化不為0的全局變量或者static修飾的變量
代碼區—存放函數體的二進制代碼示意圖
三、各地址空間的特點
棧區—棧區的權限由系統決定,數據具有先進後出,後進先出的特點。若定義一個未初始化的局部變量,該變量被初始化為隨機值
堆區—堆區的權限由用戶決定,用戶通過malloc、ralloc、calloc分配地址空間,並使用free()函數釋放空間,數據具有先進先 出、後進後出的特點
數據區:
bss段—若定義了一個未初始化的全局變量,該變量被默認初始化為0
rodata段—當中保存的常量是不允許被修改的
data段(靜態數據區) — 若定義了一個未初始化的靜態全局變量,該全局變量被默認初始化為0
代碼區—存放了程序代碼的數據,假如機器中有數個進程運行相同的一個程序,那麼它們就可以使用同一個代碼段