[英]Programmer's understanding of Memory in the Vista Windows Task Manager
[英]Help understanding Windows memory - “Working Set”
我一直在追蹤我的應用程序中的一些內存泄漏。 這是一個真正的痛苦,但我終於收緊了一切。 但是,有一點Windows內存管理令我感到困惑。 以下是應用程序內存使用情況的打印輸出...
Time PrivateMemorySize64 WorkingSet64
20:00:36 47480, 50144
20:01:06 47480, 50144
20:01:36 47480, 50144
20:02:06 47480, 149540
20:02:36 47480, 149540
20:03:06 47480, 149540
工作裝置在30秒的時間內從49 MB跳到146。 這種情況在一夜之間發生,因為應用程序基本上什
工作集(這是任務管理器向我展示的)似乎能夠受到其他應用程序(如調試器)的影響(正如我在查找內存泄漏時所了解的那樣)。 在閱讀了有關工作集的文檔后,我仍然沒有很好的理解。
任何幫助表示贊賞。
更新 :感謝響應者的一些鏈接以及一些額外的搜索,我更好地了解了一個單獨的流程如何導致我的流程的工作集增長。 很高興知道工作集中的峰值並不一定表明你的應用程序正在泄漏...還有理由不依賴任務管理器進行內存評估:)
有用的網址:
簡單地說,工作集是您的進程當前擁有的內存頁面的集合,而不是換出(即在RAM中)。 然而,這有點不准確。 現實要復雜得多。
Windows為每個進程維護最小工作集大小和最大工作集大小。 最小工作集很容易,它將授予Windows每個進程(只要它可以通過物理限制)。
最大工作集更加可疑。 如果您的程序使用的內存超過其配額中的內存,Windows將刪除一些頁面。 然而,雖然它們不再在您的工作集中,但這些頁面不一定 “消失”。
相反,這些頁面將從您的工作集中刪除並移動到可用頁面池中。 因此,如果某些其他程序需要更多內存並且沒有剩余已清除的頁面,則您的頁面將被清除,並分配給不同的進程。 當您訪問它們時,如果仍然高於最大工作集大小,則需要再次從交換文件中提取它們,可能還要清除其他頁面。
但是,如果沒有人要求同時獲得更多內存(或者無論如何都可以通過未使用的頁面滿足所有要求),那么訪問其中一個頁面只會使其“神奇地重新出現”並取而代之的是另一頁。
因此,您的進程可以在RAM中擁有比實際工作集中更多的頁面,但它並不“正式”擁有它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.