linux 程序中的記憶體區域劃分

2021-07-11 18:20:28 字數 485 閱讀 3152

有幾天沒來了,今天翻到了程序中記憶體區域劃分筆記 ,就簡單寫寫

(1)**區:(text)

主要用於存放功能**,函式指標指向該區域,比如函式名。

(2)唯讀常量區:(text)

存放字串常量和用const修飾的,並且已經初始化的全域性變數和靜態區域性變數。

(3)全域性區/資料區:(data)

存放已經初始化的全域性變數和靜態區域性變數(這個區的資料都有儲存空間,生命週期是整個程式)。

(4)bss段:

存放沒有初始化的全域性變數和靜態區域性變數,bss段會在main函式執行前清0。

(5)堆區:

主要表示使用malloc / calloc / realloc / free等手動申請的動態記憶體,需要手動釋放。

(6)棧區:

主要存放非靜態區域性變數(包括函式的引數),塊變數,有作業系統自動管理。

程序主要分為這幾個區。在程序和執行緒的使用中注意變數所在的區域。否則很容易出現段錯誤

Linux程序的虛擬記憶體區域劃分

linux程序的虛擬記憶體區域分為 區 唯讀常量區 全域性區 bss段 堆區 棧區 區 儲存功能 函式名所在的區域 唯讀常量區 存放字串常量,以及const修飾的全域性變數 全域性區 資料區 存放已經初始化的全域性變數和已經初始化用static修飾的區域性變數 bss段 存放沒有初始化的全域性變數和...

C 中記憶體區域的劃分

那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。那些由new或者malloc分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動 ...

c 記憶體區域劃分

c 中,記憶體分為5個區域 堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。其中 棧 就是那些編譯器在需要的時候分配,不需要的時候清理的變數的儲存區域,比如區域性變數和函式引數。在記憶體中連續儲存的區域,位址從低到高。堆 就是new分配的記憶體塊,需要delete。如果沒有delete,在程式退...