C C 的動態記憶體分配

2021-09-13 03:00:40 字數 927 閱讀 3117

記憶體分配方式有三種:

從靜態儲存區分配:內存在編譯的時候已經分配好,這塊內存在程式的整個執行期間都存在(例:全域性變數、static變數)

在棧上建立:區域性變數在棧上建立,函式執行結束時這些儲存單元自動被釋放。效率高,但容量有限。

從堆上分配:動態記憶體分配。程式設計師用時自己申請和釋放,使用靈活,但會存在記憶體洩漏。  

volatile:編譯時不優化,執行時不快取,每次需從記憶體中讀出。

static

全域性變數:不允許從其他檔案訪問

區域性變數:變數不儲存在堆疊中,它的值在整個程式的執行期一直保持。

動態記憶體開闢:

calloc

申請num個size大小的位元組空間,但會之前把所有位元組初始化為0

realloc

是解決之前所申請空間不足而產生的,如果後續空間滿足新擴充套件空間大小就直接追加在後面 

如果後續空間不足,則從堆上重新找乙個空間進行申請。

malloc/free和new/delete的區別

malloc/free是函式,new/delete是操作符。

malloc/free需要手動計算申請的空間,而new/delete只需要加上書記型別即可。

malloc/free申請空間時不需要呼叫建構函式和析構函式,而new/delete需要盜用建構函式

malloc/free在型別不同時需要進行強制型別轉換,而new/delete不用

malloc/free需要進行判空,而new/delete不要,但new/delete需要進行異常捕獲。

new/delete比malloc/free更慢一些,因為new/delete底層是malloc/free的封裝

class headonly

private:

headonly(){}

headonly(const headonly&){}

}

C C 動態記憶體分配

int p null c語言寫法 等價於數字0 p int malloc sizeof int if p null 例2 char point null point char malloc sizeof char if point null 例3 int p int malloc sizeof in...

動態記憶體分配

在c 中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。c 中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這...

動態記憶體分配

為什麼使用動態記憶體分配?c語言中的一切操作都是基於記憶體的 變數和陣列都是記憶體的別名,如何分配這些記憶體由編譯器在編譯期間決定 定義陣列的時候必須指定陣列唱的 而陣列長度是在編譯期就必須決定的 需求 程式執行的過程中,可能需要使用一些額外的記憶體空間 malloc和free malloc和fre...