歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 進程的虛擬地址空間分配概述

進程的虛擬地址空間分配概述

日期:2017/3/3 11:30:47   编辑:Linux技術

一、為什麼進行內存空間的分配

在任何程序設計環境及語言中,內存管理都十分重要。在目前的計算機系統或嵌入式系統中,內存資源仍然是有限的。因此在程序設計中,有效地管理內存資源是程序員首先考慮的問題。

二、進程虛擬地址空間的分類和空間示意圖

棧區—由編譯器自動分配釋放,存放函數形參,局部變量和自動變量堆區—用於分配由malloc、realloc、calloc分配的空間

數據區—該區又分為bss段rodata段data段:bss段—保存未初始化或者初始化為0全局變量

rodata段—用於保存常量data段(靜態數據區)—保存初始化不為0的全局變量或者static修飾的變量

代碼區—存放函數體的二進制代碼示意圖

三、各地址空間的特點

棧區—棧區的權限由系統決定,數據具有先進後出,後進先出的特點。若定義一個未初始化的局部變量,該變量被初始化為隨機值

堆區—堆區的權限由用戶決定,用戶通過malloc、ralloc、calloc分配地址空間,並使用free()函數釋放空間,數據具有先進先 出、後進後出的特點

數據區:

bss段—若定義了一個未初始化的全局變量,該變量被默認初始化為0

rodata段—當中保存的常量是不允許被修改的

data段(靜態數據區) — 若定義了一個未初始化的靜態全局變量,該全局變量被默認初始化為0

代碼區—存放了程序代碼的數據,假如機器中有數個進程運行相同的一個程序,那麼它們就可以使用同一個代碼段

Copyright © Linux教程網 All Rights Reserved