C 中的記憶體管理

2021-09-26 08:23:09 字數 515 閱讀 3692

1、new/delete c++具備申請/釋放堆記憶體功能的運算子。

相當於c語言中的malloc和free

new 型別:會自動計算型別所需要的位元組數,然後從堆中分配對應位元組數的記憶體,返回記憶體的首位址(具備型別的指標)

delete 指標:會自動釋放記憶體

注意:new/delete 與malloc/free不能混用,因為 new和delete會自動呼叫類、結構的建構函式、析構函式。

陣列的分配與釋放

new 型別[n]; n表示陣列的長度,如果是類、結構會自動呼叫n次建構函式

delete 指標;通過 new分配的記憶體必須通過delete釋放

new 返回值前4個位元組中存放在陣列的長度。

3、重複釋放

delete/delete不能重複釋放同一塊記憶體。

delete/delete釋放野指標的後果不確定,但釋放空指標是安全的。

4、記憶體分配失敗

當分配的記憶體過大,沒有能需求的整塊記憶體就會丟擲異常std::bad_alloc。

C 中記憶體管理

1 分配方式簡介 在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。棧,在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。堆,就是那些由n...

C 中基本的記憶體管理

c 記憶體管理 operator new 與 operator delete函式 new delete 原理 棧 非靜態區域性變數,函式引數,返回值等,棧是向下增長的 記憶體對映段 裝載乙個共享的動態記憶體庫 堆 用於程式執行時動態記憶體分配,可以向上增長 資料段 儲存全域性變數和靜態資料 段 可執...

C 中vector容器的記憶體管理

vector是類模板,某種程度上可以看做是陣列的公升級版,但建立後仍可以改變大小。甚至 c primer 第4版 中還有這樣子的說法 從技術上說,在原來為空的vector容器上n次呼叫push back函式,從而建立擁有n個元素的vector容器,其執行時間永遠不能超過n的常量倍。大家也可能都知道,...