Re: [問題] 使用new的記憶體釋放問題

看板C_and_CPP作者 ( )時間15年前 (2009/07/28 00:25), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《ii237 (羊咩)》之銘言: : 謝謝各位版的提供的資訊 : 我今天試了一下 : 照下面的function來new (用while讓它多跑幾次) : 再用top來看記憶體 在linux下執行 : 結果是 程式在run時記憶體是會一直被吃掉的 : 不過在程式結束後記憶體會被釋放回來 : 雖然程式結束之後記憶體會被釋放 : (不過 C 的malloc似乎就不會因為程式結束釋放?) : 但顯然像版友說的一樣 要養成寫delete的好習慣才好 :) : 才不會程式長期run下來當掉 其實也未必要一個一個 delete, 基於效能考量的狀況下很多人會使用 memory pool, 就是 allocate 一大塊記憶體下來, 然後 new 的東西都是從裡面劃一塊給你用, 這樣離開的時候只要一次性的釋放掉整個 pool 就好。 其實 OS 也不是聰明到知道你 new 了什麼東西, 它也是在 virtual memory 裡劃一塊叫做 heap 的空間給 process 用, 不夠用的時候讓它長大, heap 內部管理則是交給 process 自己負責 (一般來說就是 new/delete 的內部實作), 你的 process 結束的時候 OS 只要直接整大塊回收就行了, 不會自動釋放的 OS 才叫做奇怪。 -- Ling-hua Tseng (uranus@tinlans.org) Department of Computer Science, National Tsing-Hua University Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design Researching: Software pipelining for VLIW architectures Homepage: https://www.tinlans.org -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.107.171

07/28 00:41, , 1F
補充: 所以沒有 "C 的malloc不會因為程式結束釋放" 這種事
07/28 00:41, 1F
文章代碼(AID): #1ARTKEjW (C_and_CPP)
文章代碼(AID): #1ARTKEjW (C_and_CPP)