我正在查看我的應用程序消耗的內存以確保我沒有分配太多內存,並且對Gnome資源監視器顯示的內容感到困惑。我已經使用以下代碼片段分配兩個獨立的應用程序中的內存,否則它們是相同的;它們含有比這個代碼和scanf函數沒有其他()調用,而我抓住了內存使用暫停執行:由Gnome資源監視器報告的C++程序中的內存使用情況:混淆
malloc(1024 * 1024 * 100);
和
char* p = new char[1204*1024*100];
下圖顯示了我的應用程序的內存使用之前這些行後:
現在,我已經讀了很多(但顯然是不夠的)內存使用情況(包括this SO問題),並且難以區分可寫入內存和虛擬內存。根據連鎖問題,
「可寫內存是你的程序有 具有寫權限分配的地址空間量」
和
「虛擬內存地址空間,你的應用程序已分配 「
1)如果我自己分配了內存,它肯定具有寫權限?
2)鏈接的問題還規定(關於malloc的)
」 ......這實際上不會分配任何內存。(見咆哮在malloc的結束 (3)有關詳細信息,我的圖片頁。)」
我沒有看到任何‘咆哮’,並展示了虛擬內存已經增加!有人可以解釋這個嗎?
3)如果我有純粹以下代碼:
char* p = new char[100];
...資源監視器顯示內存和重寫存儲器增加了8KB - 同樣的,當我分配一個完整的一兆字節! - 虛擬內存增加0.1。這裏發生了什麼?
4)我應該在資源監視器中查看哪些列以查看我的應用程序使用了多少內存?
非常感謝您的參與,如果不清楚或遺漏了任何可能導致我自己找到答案的事情,我們深表歉意。
我不清楚你的問題是否有確切的副本,所以我沒有關閉它。但是您可能錯過的技術術語是「overcommit」。用'[C] overcommit'搜索SO顯示出很多結果。請稍微查看一下,然後回來告訴我們你是否還有更具體的問題。 – 2014-10-16 16:02:57
這和「懶惰分配」或「需求分配」......當應用程序「分配」更多的內存時,Linux往往只是將一些額外的虛擬地址空間標記爲正在使用中,而沒有真正分配物理內存來填充該地址空間 - 實際分配會在稍後嘗試訪問新的虛擬地址時發生...... – twalberg 2014-10-16 16:10:44
好的。我研究了推薦的術語並找到有用的鏈接。 [This](http://www.etalabs.net/overcommit.html)談論overcommit,[this](http://www.win.tue.nl/~aeb/linux/lk/lk-9。 html#ss9.6)有一些示例代碼。所以我現在知道爲什麼我的「可寫」列不會增加,直到我觸摸我的記憶(通過'memset'),但我的「虛擬」一個立即增加。但我仍不清楚爲什麼觸摸我的記憶將其從「虛擬」改爲「可寫」。另一個問題仍然是爲什麼我分配了8KB的只有100個字符...... – Wad 2014-10-16 17:07:49