為什麼我delete後記憶體沒有被釋放?

2021-07-05 11:32:19 字數 823 閱讀 1081

連線:

親身經歷,覺得很奇怪,所以查了下這個問題

struct list ;

我用的是鍊錶,

list* p;

list* pp = head;

for(tint i = 0; i < iindex + ipos - 1; i ++)

}刪除了1000多個,加起來至少得幾百k了吧,可程式占用的記憶體並沒有絲毫的減少,程式退出後記憶體倒是釋放了

回答一:

1.沒看到你對結構體成員進行記憶體分配。

2.記憶體應該有區塊分配/**機制,不到一定的粒度可能看不出變化。

回答二:

malloc申請的記憶體都不是記憶體管理的一等公民.

在win和linux(unix-like)上面,malloc申請的都是堆上的記憶體,而堆是c執行庫向os申請的.

那麼你free的記憶體也就是堆上的,應用占用的記憶體不會有明顯改變,除非到一定程度那個堆被釋放了.

delete是靠free實現的.

回答三:

lz的情況正常,要不容易整理記憶體碎片

那樣的話,效率會很差

系統一般都是以頁為單位分配,便於管理

你申請的位址,系統都有記載,但系統很少回讀這些表內的記憶體現在狀態或者說去整理碎片

所以就會一廂情願認為你delete的內容在使用,

即使他已經被標記了未使用,放在相應的記憶體情況表

但當記憶體不足(或達到一定的情況)時,他就會適當的回讀下,整理下記憶體碎片

(但如果現在情況不會引起記憶體危機,他一般是不會回讀整理記憶體碎片的)

個人觀點

回答四:

等堆被釋放了,占用記憶體大小才會有顯著的變化.

為什麼沒有我要的插座?

我想不通一件事情,為什麼到現在還沒有我想要的插座 乙個usb控制的電源插座,它可以用這樣的語句來從電腦控制開和關 set objlamp createobject plug.lamp objlamp.on true 更多的帶晶元的電器不夠,還要能互相連線的 更進一步,就是為什麼現在在網路上面可以遠端...

那天我為什麼最終沒有跳入長江

那天我為什麼最終沒有跳入長江 陳美玲來到往日熟悉的喧鬧的 交易所,我目之所及是一片慘綠。雖然到處嚷嚷著 該出手時就出手了,丟擲一連串救市的胡蘿蔔,各界對 盈利前景也持樂觀態度,但 走勢卻出乎預期,2008年10 月27日,上證指數衝破 1802 點後,如葛州壩決堤般大踏步下瀉。我不需要一秒鐘等候,就...

為什麼我還沒有成功?

為什麼我沒有成功?阻礙你從業餘選手變成專家的唯一因素就是 專注。天才?如果我們投入足夠的時間並足夠關注,我們都可以一躍 至少接近 成為天才。至少大腦科學家們是這麼說的。最棒的是 這樣做從來都不晚。摘自 程式設計師雜誌 2007年12刊 為什麼我沒有成功?阻礙你從業餘選手變成專家的唯一因素就是 專注。...