亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是私有字節,虛擬字節,工作集?

什么是私有字節,虛擬字節,工作集?

HUWWW 2019-07-03 18:47:44
什么是私有字節,虛擬字節,工作集?我正在嘗試使用PerfMon Windows實用程序來調試進程中的內存泄漏。PerfMon是這樣解釋這些術語的:工作裝置此進程的工作集的當前大小(以字節為單位)。工作集是進程中線程最近接觸到的一組內存頁。如果計算機中的空閑內存超過閾值,即使沒有使用頁面,頁面仍留在進程的工作集中。當空閑內存低于閾值時,將從工作集中修剪頁面。如果需要它們,那么在離開主內存之前,它們將被軟故障恢復到工作集中。虛擬字節進程正在使用的虛擬地址空間的當前大小(以字節為單位)。使用虛擬地址空間并不一定意味著相應地使用磁盤或主內存頁。虛擬空間是有限的,進程可以限制其加載庫的能力。二等兵拜特斯此進程分配的內存當前大小(以字節為單位),不能與其他進程共享。以下是我的問題:我應該衡量的是二等兵拜特(PrivateBytes),以確保流程是否存在任何泄漏,因為它不涉及任何共享庫,如果發生任何泄漏,將來自進程本身?進程消耗的總內存是多少?是虛擬字節還是虛擬字節和工作集的總和?私有字節、工作集和虛擬字節之間有什么關系嗎?還有其他工具可以更好地了解內存的使用情況嗎?
查看完整描述

3 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

這個問題的簡單答案是這些值中沒有一個是一個可執行文件實際使用多少內存的可靠指標,也沒有一個是真正適合調試內存泄漏的值。

二等兵拜特斯引用進程可執行文件的內存量。索要-不一定是數額實際使用..它們是“私有”的,因為它們(通常)排除內存映射文件(即共享DLL)。但是-這是個陷阱-它們不一定排除記憶由這些文件分配..無法判斷私有字節的更改是由于可執行文件本身還是鏈接庫造成的。私有字節也是完全是物理內存;可以將它們分頁到磁盤或備用頁列表中(即不再使用,但也不分頁)。

工作裝置指的是總數物理進程使用的內存(RAM)。然而,與私有字節不同的是,它還包括內存映射文件和各種其他資源,因此它比私有字節更不準確。這個值與TaskManager的“MEM使用”中報告的值相同,并且是近年來造成無數混亂的根源。工作集中的內存是“物理的”,也就是說它可以在沒有頁面錯誤的情況下被處理;但是,備用頁列表是物理上仍然在內存中,但在工作集中沒有報告,這就是為什么當您最小化應用程序時,可能會看到“MEM使用量”突然下降。

虛擬字節是總數嗎?虛擬地址空間被整個過程所占據。這與工作集類似,因為它包含內存映射文件(共享DLL),但它也包括待機列表中的數據和已被分頁并位于磁盤某處的分頁文件中的數據。在重載下,每個進程在系統上使用的總虛擬字節加起來將大大超過機器實際擁有的內存。

所以關系是:

  • 私有字節是您的應用程序實際分配的,但包括分頁文件的使用;
  • 工作集是非分頁的私有字節加上內存映射的文件;
  • 虛擬字節是工作集加上分頁的私有字節和備用列表。

這里還有另一個問題:就像共享庫可以在應用程序模塊內分配內存一樣,導致在應用程序的私有字節中報告的潛在錯誤,你的應用程序也可能最終在共享模塊,導致錯誤負片..這意味著您的應用程序實際上有可能發生內存泄漏,而這種泄漏根本不會在私有字節中顯示。不太可能,但有可能。

二等兵拜特斯是個合理的人近似您的可執行文件正在使用并可用于幫助的內存量。縮小范圍內存泄漏的潛在候選列表;如果您看到數量不斷地不斷增加,您將希望檢查該進程是否存在泄漏。但是,這不可能,證明是否有漏洞。

在Windows中檢測/糾正內存泄漏的最有效工具之一實際上是VisualStudio(鏈接指向使用VS進行內存泄漏的頁面,而不是產品頁)。理性凈化是另一種可能性。微軟也有一個更通用的最佳做法文件在這個問題上。下面列出了更多的工具前一個問題.

我希望這能澄清一些事情!跟蹤內存泄漏是調試過程中最困難的工作之一。祝好運。


查看完整回答
反對 回復 2019-07-03
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

PerfMon計數器的定義從一開始就中斷了,由于某些原因似乎很難糾正。

視頻中提供了Windows內存管理的一個很好的概述“記憶管理之謎揭曉“在MSDN上:它涵蓋了比跟蹤內存泄漏(例如工作集管理)更多的主題,但是在相關主題中給出了足夠的細節。


為了給您提示PerfMon計數器描述的問題,下面是關于“二等兵拜特斯表演反擊-小心!“在MSDN上:

問:二等兵什么時候不是二等兵拜德?

當它不是居民的時候。

Private Bytes計數器報告進程的提交負責。也就是說,在交換文件中分配了多少空間,以便在交換時保存私有內存的內容。注意:由于可能與未提交的保留狀態下的虛擬內存混淆,所以我避免使用“保留”一詞。


從“績效計劃“在MSDN上:

3.3二等兵拜特斯

3.3.1說明

私有內存,定義為分配給其他進程不能共享的進程的內存。當多個這樣的進程在一臺機器上執行時,這個內存比共享內存更昂貴。傳統的非托管dll中的私有內存通常由C+靜態組成,約占DLL總工作集的5%。


查看完整回答
反對 回復 2019-07-03
  • 3 回答
  • 0 關注
  • 1165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號