2011-07-10 43 views
3

什麼是最有效和準確的方式/ API來測量從相同的運行進程編程的堆內存消耗?我想估計(儘可能準確是合理可行的)有多少內存已自啓動newmalloc,減去已經freedeletelinux機制來測量進程內存消耗f

問題的範圍內存是Linux和其他可能的Linux環境。語言是C或C++


編輯 它通過任何malloc實現足夠的,我的目的就知道分配/召開塊的實際數量(和大小),我不需要詳細的實際malloc內存減去釋放的內存

+1

從你的程序內部(你想監視自己),還是在外面(你想監視正在運行的程序)?對於人類(交互使用)還是自動的? –

+0

來自相同的進程,大概使用C庫 – lurscher

+4

如果你編寫的代碼,添加包裝分配/刪除和計數字節... –

回答

0

如果您使用valgrind並運行程序以完成,它將爲您提供有關內存使用情況的報告。

http://valgrind.org/

+0

對不起,我的問題是不夠清楚。我的意思是從相同的運行過程編程。我編輯來反映這一點 – lurscher

3

假設新用途的malloc看here

有關進程內存分配的更多詳細信息,請查看/ proc/[pid]/maps。

另請注意,linux實現了寫時複製。這意味着有時進程可以共享內存。如果過程在沒有調用exec的情況下分叉,那麼情況尤其如此。

1

你認爲讀取/ proc/u/stat? (其中「u」是您的pid)

3

您可以使用mallinfo進行估算。我剛剛發現這一點,不知道這是過程還是系統..:/

我不完全確定你在問什麼,malloc減去了因爲內存碎片而少於實際使用量,if你真的需要這個數字你必須使用自定義分配器(這是現有的分配器很小的包裝)無處不在在你的代碼將是痛苦的。

0

通過鏈接tcmalloc from Google Perftools,您可以獲得關於堆使用情況的相當多信息。它旨在定位內存泄漏並確定「誰分配了所有內存」,但它提供了足夠的工具來回答關於堆的大多數問題。