我知道在內存分析中已經有一些線程使用了massif和其他工具,但我不知道是否有任何工具或常見技術用於生產環境中的運行時內存分析。C++中的運行時內存分析
可以想象一個實現,其中每個類都提供一個memSize()函數,並通過在其所有成員上調用memSize()並添加它們自己的大小(或大小估計)來擴展容器。然後,在任何時候,您都可以查詢應用程序,並使用大部分內存以及隨着時間的推移而改變的主要數據結構。
不幸的是,上述策略可能會非常棘手 - 您必須處理諸如鎖定,內存對齊等問題,有時您不會知道第三方數據結構有多大,並且您必須猜測。總的來說,它似乎還有相當多的工作要添加到所有類...
因此,來實際的問題 - 什麼是監視內存使用情況和導致內存在運行時增長的好方法處理?
這看起來像很多額外的信息(特別是堆棧跟蹤),打開它的性能影響是什麼? –
這基本上是massif類型方法的運行時版本,對吧?問題在於 - 比方說,如果你知道你有100M的字符串,並且這是你的大部分內存使用情況 - 這是否對你有幫助?假設你有大量的類和集合,其中包含字符串 - 你怎麼知道哪一個導致高使用率......這就是爲什麼我在考慮更多遍歷顯式結構類型的方法 – naumcho
@Matthieu:在我們的嵌入式系統中獲取堆棧跟蹤並不昂貴。我們沒有得到符號,只是幀的地址,並且使它成爲固定成本,我們只提取前6幀左右。然後作爲後處理,我們使用符號圖將地址轉換爲符號。 – Miguel