C 堆 棧和記憶體洩露

2021-09-13 18:34:56 字數 512 閱讀 3126

自動儲存、靜態儲存和動態儲存的區別

自動儲存的變數通常儲存在棧中,後進先出。

使用new建立的記憶體空間通常被稱為自由儲存空間或堆,管理了乙個記憶體池,該記憶體池與用於靜態變數和自動變數的記憶體是分開的。

記憶體洩露
如果使用new運算子在自由儲存空間(或堆)上建立變數後,沒有呼叫delete,將會發生什麼情況?

如果沒有呼叫delete,則即使指向該記憶體的指標由於生命週期的原因被釋放,在自由儲存空間的上分配的變數或結構依然存在。但我們無法訪問它,因為指向它的指標無效。這將導致記憶體洩露

被洩露的內存在程式的整個生命週期內都不可使用,記憶體被分配出去,但無法收回。極端情況是,記憶體洩露非常嚴重,以致於應用程式可用的記憶體被耗盡,出現記憶體耗盡錯誤,導致程式崩潰。

堆,棧,記憶體洩露,記憶體溢位介紹

簡單的可以理解為 heap 堆 是由malloc之類函式分配的空間所在地。位址是由低向高增長的。stack 棧 是自動分配變數,以及函式呼叫的時候所使用的一些空間。位址是由高向低減少的。一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯...

堆,棧,記憶體洩露,記憶體溢位介紹

簡單的可以理解為 heap 是由malloc之類函式分配的空間所在地。位址是由低向高增長的。stack 是自動分配變數,以及函式呼叫的時候所使用的一些空間。位址是由高向低減少的。一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分...

C 記憶體洩露

簡單點說就是只申請不釋放 在c 中我們通過malloc,new來通過系統申請記憶體,但當我們使用完畢之後 裡面可能就沒有執行相應的free和delete的操作,這樣我們申請的這部分記憶體系統就不會再次的 分配,這就造成了記憶體洩露!這篇帖子講的很細大家可以研究研究。我們在delete乙個指標之後要將...