學習筆記 | 內存溢出和內存泄漏

內存溢出和內存泄漏

1、內存溢出

  • 指程序申請內存時,沒有足夠的內存供申請者使用。內存溢出就是你要的內存空間超過了系統實際分配給你的空間,此時系統相當於沒法滿足你的需求,就會報內存溢出的錯誤

內存溢出原因:

  • 內存中加載的數據量過於龐大,如一次從數據庫取出過多數據
  • 集合類中有對對象的引用,使用完後未清空,使得不能回收
  • 代碼中存在死循環或循環產生過多重複的對象實體
  • 使用的第三方軟件中的BUG
  • 啓動參數內存值設定的過小

2、內存泄漏

  • 內存泄漏是指由於疏忽或錯誤造成了程序未能釋放掉不再使用的內存的情況。內存泄漏並非指內存在物理上的消失,而是應用程序分配某段內存後,由於設計錯誤,失去了對該段內存的控制,因而造成了內存的浪費。

內存泄漏的分類:

1、堆內存泄漏 (Heap leak)。對內存指的是程序運行中根據需要分配通過malloc,realloc new等從堆中分配的一塊內存,再是完成後必須通過調用對應的 free或者delete 刪掉。如果程序的設計的錯誤導致這部分內存沒有被釋放,那麼此後這塊內存將不會被使用,就會產生Heap Leak。

2、系統資源泄露(Resource Leak)。主要指程序使用系統分配的資源比如 Bitmap,handle ,SOCKET等沒有使用相應的函數釋放掉,導致系統資源的浪費,嚴重可導致系統效能降低,系統運行不穩定。

3、沒有將基類的析構函數定義爲虛函數。當基類指針指向子類對象時,如果基類的析構函數不是virtual,那麼子類的析構函數將不會被調用,子類的資源沒有正確是釋放,因此造成內存泄露。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章