我爲工作寫的程序需要跟蹤自己使用的內存。但它不能監視整個內存的使用情況,我需要它來監視程序中的每個對象以及對象正在使用多少內存,這樣一來,如果使用上述方法,它可以告訴該對象減少內存使用量一定的容量。監視內存使用情況的部分包含一個指向所有創建對象的指針,並通過調用該對象上的方法來追蹤其內存使用情況,該方法返回對象的大小。準確計算由C++編程使用的內存
我遇到的問題是我無法準確計算所用內存的大小。如果我的計算結果稍微偏離了一點也沒關係,但是我有很大的不同。程序計算的大小根據程序的實際內存使用量的1/2到2/3而變化(取決於程序執行的操作)。例如,使用3.35gb RAM的程序計算爲僅使用2.16gb。
當前計算對象大小的方法是將sizeof(* this)添加到對象中任何矢量或數組的長度乘以vector/array中元素的大小。
我計算內存使用的方式有什麼問題嗎?或者有沒有其他的我沒有考慮到?如果有人知道一個程序,你可以通過一個程序的不同方面分析內存使用情況,這也是非常有用的,這樣我可以追蹤所有這些額外內存來自哪裏(最好是一個可以在沒有GUI的情況下在Linux上運行的內存我使用Ubuntu服務器,但也有我可以使用的Windows機器)。
你在這些媒介中保留了哪些物體?如果這些對象動態分配內存(使用'new','malloc'等),'sizeof'將不會佔用這個空間。 – jogojapan
該問題可能來自您正在使用的程序,告訴您有多少內存已分配給您的應用程序(而不是您的代碼進行計算)。問題是這個程序增加了操作系統已經分配給你的應用程序的頁面總數。運行時然後使用分配的頁面進行自己的內存管理(並非所有的內存都可以分配給對象)。 –
一件簡單的事情是:如果大量內存在向量中,請記住使用它們的容量而不是它們的大小來估計實際內存「使用量」(即佔用虛擬地址),而不是理論內存使用量(內存實際上是有用的) 。其他容器由於容器的開銷而要昂貴得多(通常每個元素有幾個指針,當元素是像整數這樣的小對象時會快速加起來。) – rici