所以我知道我可以通过全局重载新方法跟踪内存分配,如下所示:http://www.almostinfinite.com/memtrack.html
然而,我想知道是否有一个很好的方法来执行每个功能,所以我可以得到一个报告每个功能分配了多少。现在我可以获取文件和行以及我提供的链接中的typeid,但我想找到哪个函数分配最多。
答案 0 :(得分:2)
做类似的事情: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.
答案 1 :(得分:0)
您使用的是什么平台?可能存在特定于平台的解决方案,而无需更改代码库中的功能。
如果您使用的是Microsoft Visual Studio,则可以使用编译器开关/ Gh和/ GH让编译器调用您可以定义的函数_penter
和_pexit
。在这些函数中,您可以查询程序使用的内存量。应该有足够的信息来确定每个函数中分配了多少内存。
此MSDN article中提供了检查内存使用情况的示例代码。