讓我們談談 .NET 高階除錯中的一些記憶體術語

Mondo 娛樂 更新 2024-01-28

在我的高階除錯之旅中,我經常有朋友問我什麼是工作集(記憶體),什麼是提交大小,什麼是虛擬大小,什麼是工作集。 截圖如下:

由於有很多朋友問,這些都不太容易用語言描述,所以我只是早上有時間系統地談談。

正如你們中的一些人可能知道的那樣,記憶體中的虛擬位址分為三類。

reserved(預訂位址) committed (提交位址) free (野生位址) 上面的 reservation + submission 就是我們的虛擬大小,即虛擬大小 = reserved + committed。

當然,言語是沒有根據的,你要拿出證據,寫乙個x86 C測試**,參考以下內容:

static void main(string args)
執行後用windbg附加程式,使用!address -summary 將計算出的記憶體與 Process Explorer 工具顯示的虛擬大小進行比較,如下所示

一些比較嚴肅的朋友可能會說:探險家顯示163300,而 windbg 顯示 163281,為什麼還差了一點,其實這是不同工具的統計誤差,僅此而已。

正如你們中的一些人可能知道的那樣,程式占用的記憶體最終會落在三個地方:

物理記憶體模組虛擬記憶體頁面檔案物理檔案對映檔案這裡的工作集特指物理記憶體模組,因為 Windows 有 mappedfile 檔案對映(記憶體共享)機制,所以物理記憶體模組上的記憶體可以進一步分為自己的獨佔+大家共享,可能有些朋友比較困惑,截圖如下:

在此圖的基礎上,它轉換為技術術語:

Workding Set = WS Private + WS Shareable最後,我們還是用資源管理器來觀察剛才的 C 程式,截圖如下:

正如我們前面提到的,記憶體最終會落在三個地方,其中乙個是虛擬記憶體(pagefile),它用於輔助物理記憶體,即頁面檔案Sys 預設在 C 盤上,截圖如下:

有了這些基礎,是時候想出乙個公式了。

Private Bytes = WS Private + Pages Out (PageFile)上面的 pages out 是我對分頁記憶體的定義,這個 private bytes 指標在記憶體洩漏的情況下特別有用,因為它可以深入了解當前程式是否有大量頁面輸出。

為了說明大量的頁面交換記憶體,請編寫乙個不斷傾注資料的示例。

internal class program "); console.writeline("成功!"); console.readline();
執行程式後,截圖如下:

根據公式:pages out = private bytes - ws private,我們可以看到大約 29GB 必須儲存在 pagefile 中。

本來想用wmic pagefile get value來檢視當前機器的虛擬記憶體占用情況,發現有時候不準確,也沒太深入挖掘,輸出如下:

c:\users\administrator>wmic pagefile get /valueallocatedbasesize=49464caption=c:\pagefile.syscurrentusage=1473description=c:\pagefile.sysinstalldate=20230807095038.481750+480name=c:\pagefile.syspeakusage=1640status=temppagefile=false
但是,正如你所看到的,這個頁面檔案系統已經從開始到48G已經飆公升到49G,其中大部分都被我的程式吞噬了。

這也是很多朋友會問的,WS Shareable 和 WS Shared 有什麼區別,從字面上看:乙個是可以被多個程序共享的記憶體頁集合,乙個是已經共享的記憶體頁的集合。

你可能有點困惑,但沒關係,你可以借助 vmmap 工具觀察它。

啟動 consoleapp6 程序觀察

從圖中可以看出,shareable=104k 和 shared=0k,這意味著什麼?感謝 consoleapp6exe 是乙個對映到記憶體的檔案,占用了 104k 的物理記憶體,沒有其他程序共享這塊物理記憶體,所以此時是 shared=0,這裡填寫 shared 最簡單的方法是開啟多個 consoleapp6 例項。

開啟多個 consoleapp6 程序觀察,然後反覆點選 consoleapp6 生成多個例項,再次使用 vmmap 觀察,截圖如下:

我盡力使用多種觀察工具眼見為實希望你不要再對這些術語感到困惑,如果以後有人問類似的問題,你可以把這個問題扔過去,減輕你我的負擔。

相關問題答案

    下面就來談談糖玉的鑑別

    嗨,親愛的讀者,今天我們就來談談糖玉的鑑別。如果你是翡翠愛好者,那麼這篇文章是不容錯過的!首先,我們來了解一下糖玉的背景。糖玉是一種非常美麗的玉石,因其紅褐色的脈絡而得名。這塊玉產於中國新疆和田地區,數量非常稀少,因此具有很高的收藏價值和市場前景。那麼,如何鑑別糖玉呢?首先,我們想從顏色開始。入手。...

    “每日聊天”味道獨特,世界十大景點一定不容錯過!

    旅行是旅行的魅力,當你環遊世界,沉浸在沉浸在迷人風景中的神奇時刻時。在這個廣袤而多樣的地球上,隱藏著一些令人驚嘆的景點,許多奇觀已成為探險家最喜歡的目的地。讓我們來看看世界上最引人注目的 個地方。首先,讓我們關注大自然的傑作 大峽谷位於美國,以其絢麗的地理奇觀而聞名,數以百萬計的年輕人湧現出令人嘆為...

    生活中總有一些事情是無法挽救的

    我們總是充滿著無盡的活力和激情,我們勇於追逐夢想,挑戰未知。人生總是充滿變數,有些事情是我們無法逾越的,比如我們離開的時候,比如枯萎的情緒。有些事情是我們放不下,比如我們追逐的夢想,比如我們心中的愛。在前進的道路上面對未知因素,當路不可逾越時,我們應該如何面對?我們需要明白,生活中總會有一些東西是我...

    分享一些最近的照片

    最近,我在整理 的時候,確實被每個 勾選了,這在當時引起了很多有趣的回憶。這是乙個陽光明媚的週末!與您的朋友分享一些 並將其視為與朋友的週末 雲聊天 上面這張照片是我在北京出差時在客戶園區拍攝的。我一直覺得北京的秋天很美!可惜,我總覺得北京的秋天太短了,感覺冬天很快就要完全結束了。北方的金色樹葉映襯...

    黃花梨的一些知識

    黃花梨,乙個充滿神秘和魅力的名字,是中國傳統家具中最珍貴的木材之一。它質地細膩,色彩鮮豔,具有極高的收藏價值和藝術價值。然而,對於大多數人來說,黃花梨可能仍然是乙個陌生的名字。今天,我們將帶大家通過一系列的介紹,領略一下黃花麗的魅力。黃花楊,又稱檀香,是一種原產於中國海南和越南的稀有樹種。它的成長週...