C語言中關於記憶體的分配

2021-08-11 08:22:28 字數 973 閱讀 5617

在編寫c語言程式時,我們的記憶體儲存在4塊區域,分別為棧(stack),堆(heap),資料區(.data和.bss區域),常量區(唯讀)。

棧區域中存放的是區域性變數,函式定義的形參,和auto修飾的自動變數。

特點 1 棧空間是os(作業系統)自動分配和**,程式設計師不用去管

2 棧空間可以被反覆使用

3 棧空間是髒的(保留上一次使用的結果)———-因此定義區域性變數時最好對其進行初始化;

4 臨時性:如果定義了乙個儲存在棧區域裡面的變數,不能返回該變數的位址;

堆區域主要存放的是用malloc,calloc以及ralloc函式分配的空間

特點 1 靈活:程式設計師可以自己手動分配,手動釋放;

2 記憶體量很大;

3 通過free()函式手動申請記憶體空間;

如果忘了釋放記憶體空間,這塊空間將會被一直占用,便不會把這塊空間分配給其他的程式,導致記憶體洩露!

4 臨時性:malloc()和free()之間,這塊記憶體是歸你使用的;但是在malloc之前和free()之後,便無使用權

5 堆空間和棧空間一樣也是髒的!使用之前需要清空一下;

malloc申請完畢後,不會自動清0;ralloc可以調整申請的堆空間的大小;

記憶體中的各個段

.text段:存放**段,儲存的程式中各個指令;

.data段:存放資料段,儲存的是全域性變數,static修飾的靜態變數

.bss:儲存的是顯示初始化為0,或沒有初始化的靜態變數;

(全域性變數不管有沒有初始化都為0,儲存在.data段)

例:static int a=5 應存入.data段

static int a/ static int a=0 應存入.bss段

特殊的:字串常量儲存在.text段!

C語言中記憶體分配

一 static在c語言裡面可以用來修飾變數,也可以用來修飾函式。1 先看用來修飾變數的時候。變數在c語言裡面可分為存在全域性資料區 棧和堆裡。其實我們平時所說的堆疊是棧而不是堆,不要弄混。例如 在file.c中 int a int main int b int c int malloc sizeo...

C語言中的記憶體分配

1 段 text 裡面儲存的是可執行程式的二進位制指令,為了防止被意外修改,段一般是唯讀的 2 全域性段 資料段data 儲存被初始化過的全域性變數 靜態變數 3 bss段 靜態資料段 儲存靜態變數 被static修飾過的變數 和末初始化的全域性變數,這段內存在程式執行前會被初始化為0 4 堆 he...

C語言中記憶體分配問題

推薦 c語言中記憶體分配 linux size命令和c程式的儲存空間布局 本大神感覺,上面的鏈結的內容,已經很好的說明了 對於乙個可執行檔案,在linux下可以使用 size命令列出目標檔案各部分佔的位元組數 分為 text段 data段與bss段 參考 linux size命令和c程式的儲存空間布...