c++ - 跟踪每个函数的内存分配

标签 c++ c profiling

所以我知道我可以使用全局重载 new 的方法来跟踪内存分配,如下所示:http://www.almostinfinite.com/memtrack.html

但是,我想知道是否有针对每个函数执行此操作的好方法,以便我可以获得每个函数分配了多少的报告。现在我可以在我提供的链接中获取文件和行以及 typeid 是什么,但我想找到分配最多的函数。

最佳答案

做这样的事情怎么样:http://ideone.com/Wqjkrw

#include <iostream>
#include <cstring>

class MemTracker
{
    private:
        static char func_name[100];
        static size_t current_size;

    public:
        MemTracker(const char* FuncName) {strcpy(&func_name[0], FuncName);}
        static void inc(size_t amount) {current_size += amount;}
        static void print() {std::cout<<func_name<<" allocated: "<<current_size<<" bytes.\n";}
        static void reset() {current_size = 0; memset(&func_name[0], 0, sizeof(func_name)/sizeof(char));}
};

char MemTracker::func_name[100] = {0};
size_t MemTracker::current_size = 0;


void* operator new(size_t size)
{
    MemTracker::inc(size);
    return malloc(size);
}

void operator delete(void* ptr)
{
    free(ptr);
}


void FuncOne()
{
    MemTracker(__func__);

    int* i = new int[100];
    delete[] i;
    i = new int[200];
    delete[] i;

    MemTracker::print();
    MemTracker::reset();
}

void FuncTwo()
{
    MemTracker(__func__);
    char* c = new char[1024];
    delete[] c;
    c = new char[2048];
    delete[] c;

    MemTracker::print();
    MemTracker::reset();
}

int main()
{
    FuncOne();
    FuncTwo();
    FuncTwo();
    FuncTwo();
    return 0;
}

打印:

FuncOne allocated: 1200 bytes.
FuncTwo allocated: 3072 bytes.
FuncTwo allocated: 3072 bytes.
FuncTwo allocated: 3072 bytes.

关于c++ - 跟踪每个函数的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22264550/

相关文章:

c++ - 测量互斥量争用/解释互斥量输出

C++ template double std::complex<double> 范数和积

c - SSE等 vector 编程(SIMD)

haskell - Haskell 特里树中的太空泄漏

对 gcc -static 选项或其在虚拟机中的行为感到困惑

c - 之前的预期表达

linux - 如何使用 perf 收集一些可读的堆栈跟踪?

c++ - 使用 g++ 编译 GLFW 代码

c++ - Pimpl 习语和没有友元声明的内部对象协作

c++ - 模型对象内部的抽象工厂?