2012-05-09 106 views
1

是否有任何方法可以跟蹤C程序每一步分配的內存數量,重新分配和釋放的內存量?我的意思是一步步分配程序中的所有內容,而不是錯誤,內存泄漏或某種方式。跟蹤內存分配

+0

可能重複的[GetTotalMemory分配在C](http://stackoverflow.com/questions/10472929/gettotalmemory-allocation-in-c) –

回答

1

一種常見的方法是爲忽略的malloc /免費使用宏:

#define malloc(size) custom_malloc(size, __FILE__, __LINE__)

然後,您可以有custom_malloc不正常的malloc,並轉儲配置信息保存到文件(或任何你想用它做)。

要跟蹤有多少內存正在被釋放,一個選項是在每個malloc調用上分配一個額外的字段來存儲分配的大小,然後您可以檢查空閒時間。 或者您可以將malloc/free指針轉儲到文件,然後編寫腳本來後期處理並排列它們。這有點依賴於你想要處理的信息。

+0

嗯,謝謝,它幫助:) –

1

是有辦法做到這一點。我只知道一種方法。它的名字叫做Pin。理想情況下,您可以將pin tool附加到二進制文件,然後它將訪問所有內存訪問和內容。它不需要對源代碼進行任何修改。

這將需要一些編程在你身邊編寫一個Pin工具。針工具本質上就是您在程序運行中指定要監視的參數的代碼,以及如何執行。它非常靈活。但要小心,它有一點學習曲線。所以,只有當你有時間學習時纔是理想的。但如果你立即得到結果,它可能不足以達到你的目的。

另外請注意,默認情況下,Pin提供了一些您可能感興趣的或您可以修改以滿足您的需求的工具。您可能想要在(我頭腦的頂部)的一些工具是: 1. Pinatrace 1. MallocTrace

我可能拼錯了一些東西。但有很多東西可能會給你想要的東西!

而其他的解決方案,將是切實可行的是@happydave和一個我不建議中提到的一個redefing的mallocfree功能,這樣當你調用malloc /免費的,它記錄了你的參數感興趣的。我推薦Pin重新定義malloc的唯一原因是當你有時間和將來你希望爲你的追蹤器添加更多的功能。

+0

嗯,我想我會嘗試兩個,謝謝:) –

+1

不要忘記,並非所有的東西都運行在英特爾(R)二進制文件中...重新定義malloc等是獲得基本級別跟蹤的合理方法,雖然它可能值得使用第三方庫,但有時可以通過重新定義方法獲得快速答案。 –

+0

我需要它,只是因爲我們的下一個考試要求以不分配額外內存的方式實現程序,並且每次重新分配只允許80個字節。當然,我知道它太低效了,但它只是爲了考試。無論如何,謝謝,我認爲宏定義做了它的工作:) –