[英]tracking dynamic memory allocation in c/c++
在c或c ++中,是否有任何方法可以跟蹤動態分配的內存。 說我有這樣的代碼
void somefunction(some arguments,long mc){
//allocate b bytes of memory using malloc,calloc or new
mc += b;
//allocate once again, say p bytes
mc += p;
//deallocate q bytes using delete or free()
mc -= q;
print "mc bytes allocated at this point";
}
可以將mc聲明為global並在所有函數中使用它。 問題是當釋放內存時,無法知道剛剛釋放了多少內存,因此在這種情況下如何更新mc。
為malloc(),calloc和free()創建包裝函數。 在malloc / calloc中,分配額外的字大小以維護要分配的內存量,並匯總在mc中分配的字節。 釋放時,請讀取第一個標頭字節,以了解要釋放多少內存,並從mc中減小相同的大小。
使用包裝器會產生開銷,僅出於調試目的,我更喜歡掛接malloc / calloc / free / etc並僅轉儲有關它們在做什么的信息。
這樣做的好處是,當您發布(不再需要調試的東西)時,您只需刪除鈎子功能即可。
您無法直接long
這樣做。 用MyLong
類long
包裝,並為您的類提供operator new
重載operator new
。 這將跟蹤堆中的內存分配。
攔截內存分配例程,如內存泄漏檢測工具中所示:
https://sourceforge.net/projects/diagnostic/ http://diagnostic.sourceforge.net/index.html
(甚至可以將其集成到您的應用程序中)。
您不僅將獲得malloc,realloc,free,而且還將獲得所有其他分配。
但是請注意,內存掛鈎正在多線程環境中運行,即使您的應用程序是單線程的,其他線程中也會發生很多事情。
保護不好的代碼可能導致死鎖-請參閱自述文件中的代碼設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.