動態記憶體分配涉及到堆疊的概念:堆疊是兩種資料結構。堆疊都是資料項按序排列的資料結構,只能在一端(稱為棧頂(top))對資料項進行插入和刪除。
棧(作業系統):由作業系統自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。
堆(作業系統): 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os**,分配方式倒是類似於鍊錶。
在c語言中,全域性變數分配在記憶體中的靜態儲存區,非靜態的區域性變數(包括形參)是分配在記憶體的動態儲存區,該儲存區被稱為棧。除此之外,c語言還允許建立記憶體動態分配區域,以存放一些臨時用的資料,這些資料不必在程式的宣告部分定義,也不必等到函式結束時才釋放,而是需要時隨時開闢,不需要是隨時釋放。這些詩句臨時存在乙個特別的自由儲存區,稱為堆區。
系統提供了四個庫函式來實現記憶體的動態分配:
(1)malloc(size) 在記憶體的動態儲存區中分配乙個長度為size的連續空間。
(2)calloc(n,size) 在記憶體的動態儲存區中分配n個長度為size的連續空間。
(3)free(p) 釋放指標變數p做指向的動態空間。
(4)realloc(p,size) 將指標變數p指向的動態空間大小改變為size。
舉個栗子:
#include
#include
int main()
void check(int *p)
程式沒有定義陣列,而是開闢了一段動態自由分配區,輸入數字時,按照位址複製給動態陣列的5個元素,p1指向第乙個整型資料,呼叫check函式時,p1作為實參傳遞給形參p,因此可以理解為形參p和實參p1公享一段動態分配區。 c語言動態記憶體分配 C 動態記憶體分配
動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...
C語言動態記憶體分配
c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...
C語言 動態記憶體分配
c語言有儲存變數的區域稱之為棧 stack 除此之外 c語言還允許建立自己的動態記憶體區域 以存放一些臨時的資料 這區域稱之為 堆 heap 也就是存放執行時的資料 可以根據程式的需要 向系統申請所需大小的空間 由於未宣告部分定義他們為變數或者陣列因此只能通過指標去訪問 建立記憶體動態分配主要由4個...