程式中通常包含著靜態記憶體和棧記憶體。
靜態記憶體用來儲存區域性static物件、類static資料成員以及定義在任何函式之外的變數(全域性變數)。
棧記憶體用來儲存定義在函式內的非static物件。分配在靜態或棧記憶體中的物件由編譯器自動建立和銷毀。對於棧物件,僅在定義的程式塊執行時才存在,程式退出,棧物件也隨即銷毀;static物件和全域性物件則是在程式結束時銷毀。
堆在使用堆空間是就需要使用動態記憶體分配。
記憶體洩漏:是指程式中己動態分配的堆記憶體由於某種原因程式未釋放或無法釋放,造成系統記憶體的浪費,導致程式執行速度減慢甚至系統崩潰等嚴重後果。
1. 記憶體洩漏出現的情況總結
首先總結一下c++在語法上的錯誤使用導致的記憶體洩漏,所以在編寫程式時,就盡量避免錯誤的編寫。
(1)正確的使用new和delete函式,需要注意的是new和delete要匹配使用,對於初學者這種情況是最常出現的。一般出錯的地方像如下的例子,在指標p的值被另乙個函式所使用。
char * funa()
void funerrorb()
(2)釋放物件陣列時,沒有使用delete。如例子所示:
void funerrora()
(3)雙指標釋放錯誤,存在指標釋放的遺漏。如例子正確的釋放乙個雙指標
void funrighta()
if(p!=nullptr)
delete p;
p = nullptr;
} }
(4)缺少拷貝建構函式。在類裡存在成員變數是指標時,在進行賦值=運算和按值傳參時,必須過載拷貝建構函式,重新實現其指標拷貝的部分.
(5)沒有將基類的析構函式定義為虛函式。當基類指標指向子類物件時,如果基類的析構函式不是virtual,那麼子類的析構函式將不會被呼叫,子類的資源沒有正確是釋放,因此造成記憶體洩露。
(6)呼叫庫存在記憶體洩漏。在使用由個人包裝或者未完全測試的庫時,要確定此庫對本程式不存在效能的影響。
作業系統相關
程序 乙個執行的程式就是乙個程序。是系統資源分配的最小單位,擁有自己獨立的記憶體空間。既不共享堆也不共享棧 由作業系統排程 執行緒 排程執行的最小單位,不能獨立存在,共享記憶體。共享堆不共享棧 由作業系統排程 協程 是一種使用者態的輕量級執行緒,排程完全由使用者控制。和執行緒一樣,共享堆不共享棧 由...
作業系統相關
seo search engine optimization 漢譯為搜尋引擎優化。是一種方式 利用搜尋引擎的規則提高 在有關搜尋引擎內的自然排名。目的是讓其在行業內佔據領先地位,獲得品牌收益。很大程度上是 經營者的一種商業行為,將自己或自己公司的排名前移。作業系統 operating system,...
作業系統相關概念
作業系統相關概念 windows windows中文是窗戶的意思。另外還有微軟公司 推出的視窗 電腦作業系統名為windows 隨著電腦硬體和軟體系統的不斷公升級,微軟的windows作業系統也在不斷公升級,從16位 32位到64位 作業系統。從最初的windows1.0到大家熟知的windows9...