簡體   English   中英

top(Activity Monitor)如何在寫入堆時更新內存使用情況? (C)

[英]How does top (Activity Monitor) update memory usage as the heap is written to? (C)

我的朋友實現了一個動態數組來學習C.當分配內存時,他將分配的空間加倍。

我們看了他的測試程序寫了4 GB的隨機字符(以避免內存壓縮),char by char。 但是,活動監視器(在Mac上,基於top )顯示內存使用量逐漸增加,而不是每次擴展都加倍。

然而,在刪除/壓縮時,內存使用會立即下降,而且代碼將釋放內存。

頂級跟蹤“實際”內存如何在分配的范圍內使用? 如果分配的其余空間無法供其他進程使用,為什么會這樣做呢?

大多數現代操作系統懶惰地分配實內存,只在嘗試使用它時提供內存。 您可以根據需要增加堆,而無需使用任何內存; 唯一的影響是分配虛擬內存地址。

只有當您實際觸摸某個頁面時,例如通過寫入該頁面,才會實際為該進程提供內存。

其中一個后果是即使沒有可用的物理內存, malloc()也可以成功。

如果您實際使用top您將看到虛擬內存分配(僅僅是虛擬地址的分配)和實際使用的內存(“駐留集”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM