我有一個非常簡單的問題,我似乎被困在發生的事情。請看下面的代碼:CArray沒有取消分配內存
CArray<double, double&> arr;
arr.SetSize(50000);
for(int i =0; i< 50000; i++)
{
arr[i] = (i+2)*3.14f;
}
arr.RemoveAll();
我會假設,RemoveAll()
後,內存將被釋放,但現在看來似乎沒有發生。要檢查內存佔用情況,請打開Taskmanager並觀察exe的內存。它在arr.SetSize()
呼叫上增加,但即使此arr
超出範圍,它也不會減少。有人可以對此進行闡述嗎?
我試過FreeExtra,但它仍然無法正常工作。我知道任務管理器不是內存分析器,但這是最容易獲得的東西。還有其他建議嗎? – Aamir
@In Silico,爲什麼FreeExtra需要分配一個新的緩衝區來減小大小?當然,如果它使用realloc來縮小所使用的內存量,最終會產生碎片堆,那麼可以避免額外堆空間的內存開銷以及複製和調用ctors和dtors的時間開銷。 –
@Shane MacLaughlin:這是一種可行的方法。但是,文檔沒有具體說明也沒有做出任何保證,讓它像那樣工作(我已經重寫了這句話)。它不是普遍的;例如'std :: vector'幾乎肯定會分配一個新緩衝區並刪除舊緩衝區,因爲分配器接口沒有'realloc()'能力。 –