2010-04-09 46 views
4

我們知道malloc()new操作從堆動態分配內存,但堆在哪裏駐留?每個進程在動態分配的名稱空間中是否有其自己的私有堆,或者操作系統是否具有由所有進程共享的全局堆。更重要的是,我從一本教科書中讀到,一旦發生內存泄漏,缺失的內存將不能重複使用,直到下次重新啓動計算機。這篇論文是正確的嗎?如果答案是肯定的,我們該如何解釋?動態分配的內存駐留在哪裏?

感謝您的回覆。

問候。

+0

你讀過關於內存泄漏的內容的教科書是哪本教科書? – 2010-04-09 08:50:47

+0

@我從圖書館借來的,不記得確切的名字,對此感到抱歉。 – 2010-04-09 08:54:13

回答

8

內存是從進程虛擬內存的用戶地址空間分配的。當進程終止時,所有內存都被操作系統回收,無需重新啓動計算機。

+0

+1。 請注意,如果進程正在運行,則其他人無法使用內存。如果泄漏增加,你很快就會失去記憶。 – Jack 2010-04-09 09:11:13

0

你沒有提到你感興趣的操作系統。 這就是沒有直接的答案。

試圖尋找到一些本書操作系統 例如Tanenbaum's

+0

@gineer我認爲你的意思是實施依賴於平臺。怎麼樣的Linux的實施 - 我不是很感興趣的Windows :-)。我應該參考哪一部分操作系統教科書?內存管理?謝謝。 – 2010-04-09 09:42:51

1

通常,C運行時將使用各種OS API來分配作爲其進程地址空間一部分的內存。在分配的內存中,它將創建堆並通過調用malloc新的從堆中分配內存本身。

原因在於OS API經常是粒度級的,需要您以大塊(例如頁面大小)分配內存,而您的應用程序通常希望在任何時候分配少量內存。