c語言記憶體管理

2021-06-22 07:19:21 字數 890 閱讀 9117

在c語言中,根據資料在記憶體中存在的時間(生存期)不同,將記憶體空間分為三個區:

1.程式區:用於儲存程式的**,即程式的二進位制**,存放函式體的二進位制**;

2.靜態儲存區:用於儲存全域性變數和靜態變數,這些變數的空間在程式編譯時就已經分配好了.全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。 - 程式結束後由系統釋放;

3.動態儲存區:用於在程式執行時分配的記憶體,又分為:堆區(heap)和堆疊區(stack)兩種.

堆區:用於

動態記憶體分配

,程式執行時由

記憶體分配函式

在堆上分配記憶體。在c語言中,

只要使用指標才能動態的分配記憶體

。由編譯器自動分配釋放 ,存放函式的引數值(函式引數值從右向左依次壓入棧中),區域性變數的值等。其操作方式類似於資料結構中的棧。

記憶體中的棧區處於相對較高的位址以位址的增長方向為上的話,棧位址是向下增長的。

棧區:在函式執行時,函式內部的區域性變數和函式引數的儲存單元的記憶體區域,函式執行結束時,這些記憶體區域會自動釋放。一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os** 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶。

堆區是向上增長的用於分配程式設計師申請的記憶體空間。

在c語言中用記憶體分配函式來實現記憶體的動態分配,這些函式有:malloc()、calloc()和realloc()函式。

小結:堆和棧的區別可以用如下的比喻來看出:

使用棧就象我們去飯館裡吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。

使用堆就象是自己動手做喜歡吃的菜餚,比較麻煩,但是比較符合自己的口味,而且自由度大。

C語言 記憶體管理

對於任何的作業系統來說,記憶體都是很寶貴的乙個地方。所以,對於程式語言來說,記憶體管理就顯得尤為重要。c語言 在記憶體中執行的時候,我們大致將占用的記憶體分為4塊區域 區 靜態區 棧區 堆區。這4各區域,有著各自的特點,他們也儲存著我們的程式在執行中的不同型別的資料。弄明白了這4個區域的資料儲存特點...

C語言 記憶體管理

記憶體管理一號傳送門 記憶體管理二號傳送門 對於乙個c語言程式而言,記憶體空間主要由五個部分組成 段 text 資料段 data bss段 bss 堆和棧組成,其中 段,資料段和bss段是編譯的時候由編譯器分配的,而堆和棧是程式執行的時候由系統分配的。在上圖中,由編譯器分配的位址空間都是在連線的時候...

C語言記憶體管理

程式設計師們經常編寫記憶體管理程式,往往提心吊膽。如果不想觸雷,唯一的解決辦法就是發現所有潛伏的地雷並且排除它們,躲是躲不了的。本章的內容比一般教科書的要深入得多,讀者需細心閱讀,做到真正地通曉記憶體管理。7.1記憶體分配方式 記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經...