為什麼存在動態記憶體分配?開闢空間的方式有兩個特點:
空間開闢大小是固定的。
陣列在申明的時候,必須指定陣列的長度,它所需要的內存在編譯時分配。
因此在這種情況下,要達到有效的資源利用,必須在執行時動態地分配所需記憶體,並在使用完畢後盡早釋放不需要的記憶體,這就是動態記憶體管理原理。
記憶體分配的方式:malloc/free、calloc、reallocmalloc/free:分配新的記憶體區域,釋放已分配的記憶體區域。
函式 malloc()分配連續的記憶體區域,其大小不小於 size。當程式通過 malloc()獲得記憶體區域時,記憶體中的內容尚未決定。calloc:分配已分配的記憶體區域。
函式 calloc()分配一塊記憶體區域,其大小至少是 count_size。換句話說,上述語句分配的空間應足夠容納乙個具有 count 個元素的陣列,每個元素占用 size 個位元組。而且,calloc()會把記憶體中每個位元組都初始化為 0。realloc:調整已分配的記憶體區域。
realloc函式的出現讓動態記憶體管理更加靈活。c/c++程式的記憶體開闢有時會我們發現過去申請的空間太小了,有時候我們又會覺得申請的空間過大了,那為了合理的時候記憶體,
我們一定會對記憶體的大小做靈活的調整。那 realloc 函式就可以做到對動態開闢記憶體大小的調整。
棧區(stack):在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些
儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有
限。 棧區主要存放執行函式而分配的區域性變數、函式引數、返回資料、返回位址等。
堆區(heap):一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os** 。分配方式類似
於鍊錶。
資料段(靜態區)(static)存放全域性變數、靜態資料。程式結束後由系統釋放。
**段:存放函式體(類成員函式和全域性函式)的二進位制**。
C語言動態記憶體管理
1 概述 動態儲存管理的基本問題是 系統如何按請求分配記憶體,如何 記憶體再利用。提出請求的使用者可能是系統的乙個作業,也可能是程式中的乙個變數。空閒塊 未曾分配的位址連續的記憶體區稱為 空閒塊 占用塊 已分配給使用者使用的位址連續的記憶體區稱為 占用塊 系統剛剛啟動時,整個記憶體可看做乙個大的 空...
C語言動態記憶體管理
c系統的函式庫中提供了了程式動態申請和釋放記憶體儲存塊的庫函式,下面將分別介紹。1 malloc 函式 a 該函式的原型 void malloc size t size b 該函式只有乙個引數,且形參size是無符號整型,該引數代表申請空間的位元組數。c 返回值 如果記憶體池中的可用記憶體滿足需求,...
C語言動態記憶體管理
在說明c語言記憶體管理之前,要知道什麼是記憶體,記憶體我個人認為可以理解為帶有標籤的盒子,所謂的帶標籤的盒子就像我們住的寢室一樣有門牌號,盒子內只能儲存固定型別的資料或變數,就如男生寢室只能住男生一樣。那麼c語言中有多少種盒子呢?有靜態儲存區 動態儲存區 內部暫存器區域。我們通常定義的變數如果沒有特...