Any tool to find size of memory allocated dynamically using malloc/realloc?

后端 未结 4 1757
时光说笑
时光说笑 2021-01-23 19:44

I have a MS-Visual Studio 2005 workspace having all c code. This application(exe) allocates memory dynamically from heap using malloc and realloc. I want to calculate the maximu

相关标签:
4条回答
  • 2021-01-23 20:18

    Memory Validator can do this.

    There are several different reports that you will find useful:

    • Running Totals. This is presented as a dialog box and provides current, cumulative and total values for each of the main memory allocator (C runtime, HeapAlloc, LocalAlloc, GlobalAlloc, CoTaskMemAlloc, etc).

    • Objects. This is one of the main tabs and displays object type, size, count, cumulative. Also subtabs for per-thread and per-dll values.

    • Sizes. This is one of the main tabs and displays size, count, cumulative. Also subtabs for per-thread and per-dll values.

    • Virtual. This displays a graphical view of memory (one pixel == one page of memory) and has subtabs showing detailed virtual memory data for virtual memory pages and virtual memory paragraphs.

    Full disclosure: I am part of the Memory Validator team.

    0 讨论(0)
  • 2021-01-23 20:18

    I would recommend the following:

    1. It you do have access to the source code that you wish to analyze, replace all malloc/realloc calls with calls you your OWN function that would perform the analysis.
    2. If you don't have access to the source code, you can use the Detours library from Microsoft. The library intercepts calls to arbitrary functions and redirects them to the custom-made implementation. In this implementation you can perform the analysis and then fall back to standard malloc/realloc.
    0 讨论(0)
  • 2021-01-23 20:25

    VS has a number of heap debugging tools such as _heapwalk, which will let you walk through the heap and get information about blocks on the heap. Most of what you need to do is figure out when your heap is at maximum usage, so you know when to walk it and find its size.

    0 讨论(0)
  • 2021-01-23 20:33

    If you statically link with the CRT, you can 'overrule' the implementation of malloc, realloc, free (in fact, all functions that appear in malloc.c, realloc,c free.c and/or dbgheap.c in the CRT). It is doable but may require some iterations before you get the full set of functions that need to be overruled.

    If you dynamically link with the CRT, you can redefine malloc, realloc and free like this:

    #define malloc(s)    mymalloc(s)
    #define realloc(p,s) myrealloc(p,s)
    #define free(p)      myfree(p)
    

    The implementations of mymalloc, myrealloc and myfree can then simply use malloc, realloc and free (be sure not to use the #define in the source file that implements mymalloc, ...) or you could use the native Windows functions.

    0 讨论(0)
提交回复
热议问题