靜態儲存分配和動態儲存分配

2021-10-04 20:23:23 字數 627 閱讀 1520

通常定義變數或者物件,編譯器在編譯時都可以根據該變數或物件的型別知道所需記憶體空間的大小,從而系統在適當的時候為他們分配確定的儲存空間,這種記憶體分配被稱為靜態儲存分配

有些操作物件只有在程式執行時才能確定,這樣編譯器在編譯時就無法為他們預定儲存空間,只能在程式執行時,系統根據執行時的要求進行記憶體分配,這種方法稱為動態記憶體分配所有動態儲存分配都在堆區中進行。

當程式執行到需要乙個動態分配的變數或物件,必須向系統申請取得堆中的一塊所需大小的儲存空間,用於儲存該變數或物件。當不再使用該變數或物件時,也就是它生命結束之時,要顯式釋放它所占用的儲存空間,這樣系統就能對該堆空間進行再分配,做到重複使用有限資源。

在c++中,申請和釋放堆中分配的儲存空間,分別使用new和delete的兩個運算子來完成,使用格式如下:

指標變數名 = new 型別名(初始化式)

delete指標名

new運算子返回的是乙個指向所分配型別變數(物件)的指標。對所建立的變數或物件,都是通過該指標來間接操作的,而動態建立的物件本身沒有名字。

動態儲存分配

動態儲存分配 在我們使用記憶體時,堆是一塊很大的記憶體塊,用於執行時分配一些小的儲存空間。c 中動態儲存分配用 new和 delete 分配完記憶體需要判斷分配是否成功 分配了新的記憶體空間,舊資料塊的資料拷貝到新的空間中,舊的記憶體需要釋放以便其他部分需要新記憶體塊的時候可以使用,如果沒有釋放就會...

動態儲存分配

malloc函式 void malloc size t n 分配n個位元組的記憶體單元,分配成功,返回記憶體單元的首位址。分配失敗,返回null。calloc函式 void calloc size t nmemb,size t size 分配nmemb個 每個大小為size 的記憶體單元,記憶體單元...

記憶體動態分配與靜態分配and儲存區域

1.c語言的全域性變數 靜態區域性變數的儲存實在編譯時確定的,其儲存的空間的實際分配在程式開始執行前完成。2.在棧上建立的,比如區域性自動變數,在執行進入變數定義所在的復合語句時為他們分配儲存單元。棧記憶體分配運算內置於處理器的指令集中 效率很高,但是分配的記憶體容量有限。3.以靜態方式安排儲存的好...