這是使用G ++ 4.1.2在CentOS 64位上的C++。new []不會減少可用內存直到填充
我們正在編寫一個測試應用程序,以加載系統上的內存使用量n千兆字節。這個想法是整個系統的負載通過SNMP等進行監控。所以這只是一種行使監控的方式。
我們所看到的不過是簡單地做:
char* p = new char[1000000000];
不影響如圖頂部或自由-m所使用的內存
內存分配似乎只能成爲「真正的」曾經的記憶被寫入:
memcpy(p, 'a', 1000000000); //shows an increase in mem usage of 1GB
但我們必須寫入所有的內存,只是寫的第一個元素沒有顯示在使用的內存增加:
p[0] = 'a'; //does not show an increase of 1GB.
這是正常的,是否已經完全分配了內存?我不確定它是否是我們正在使用的工具(top和free -m),它們顯示的值不正確,或者在編譯器或運行時和/或內核中是否存在某些巧妙的事情。
即使在優化關閉的調試版本中也可以看到此行爲。
這是我的理解,一個新的[]立即分配內存。 C++運行時是否延遲這個實際的分配,直到它被訪問時爲止。在這種情況下,可以將內存不足異常延遲到實際分配內存之後,直到訪問內存爲止?
因爲這對我們來說不是問題,但它會很高興知道爲什麼會發生這種事情!
乾杯!
編輯:
我不想知道我們應該如何使用的載體,這不是OO/C++ /處事等等等等的電流方式,我只是想知道這是爲什麼發生這種事情的方式,而不是對嘗試它的替代方法提出建議。
這! +1爲正確的答案。 – 2011-03-17 16:10:41