什麼是最有效和準確的方式/ API來測量從相同的運行進程編程的堆內存消耗?我想估計(儘可能準確是合理可行的)有多少內存已自啓動new
或malloc
,減去已經free
或delete
linux機制來測量進程內存消耗f
問題的範圍內存是Linux和其他可能的Linux環境。語言是C或C++
編輯 它通過任何malloc
實現足夠的,我的目的就知道分配/召開塊的實際數量(和大小),我不需要詳細的實際malloc內存減去釋放的內存
什麼是最有效和準確的方式/ API來測量從相同的運行進程編程的堆內存消耗?我想估計(儘可能準確是合理可行的)有多少內存已自啓動new
或malloc
,減去已經free
或delete
linux機制來測量進程內存消耗f
問題的範圍內存是Linux和其他可能的Linux環境。語言是C或C++
編輯 它通過任何malloc
實現足夠的,我的目的就知道分配/召開塊的實際數量(和大小),我不需要詳細的實際malloc內存減去釋放的內存
假設新用途的malloc看here。
有關進程內存分配的更多詳細信息,請查看/ proc/[pid]/maps。
另請注意,linux實現了寫時複製。這意味着有時進程可以共享內存。如果過程在沒有調用exec的情況下分叉,那麼情況尤其如此。
你認爲讀取/ proc/u/stat? (其中「u」是您的pid)
您可以使用mallinfo進行估算。我剛剛發現這一點,不知道這是過程還是系統..:/
我不完全確定你在問什麼,malloc減去了因爲內存碎片而少於實際使用量,if你真的需要這個數字你必須使用自定義分配器(這是現有的分配器很小的包裝)無處不在在你的代碼將是痛苦的。
通過鏈接tcmalloc from Google Perftools,您可以獲得關於堆使用情況的相當多信息。它旨在定位內存泄漏並確定「誰分配了所有內存」,但它提供了足夠的工具來回答關於堆的大多數問題。
從你的程序內部(你想監視自己),還是在外面(你想監視正在運行的程序)?對於人類(交互使用)還是自動的? –
來自相同的進程,大概使用C庫 – lurscher
如果你編寫的代碼,添加包裝分配/刪除和計數字節... –