如何计算哪个函数请求多少字节? 我在C++中有一个复杂的代码库。我运行了一个内存分析器,它统计malloc分配的字节数,这给了我X字节。理论上,我的代码应该返回X-Y字节(Y随输入而变化,范围从几KB到几GB,因此这是不可忽略的)

如何计算哪个函数请求多少字节? 我在C++中有一个复杂的代码库。我运行了一个内存分析器,它统计malloc分配的字节数,这给了我X字节。理论上,我的代码应该返回X-Y字节(Y随输入而变化,范围从几KB到几GB,因此这是不可忽略的),c++,linux,C++,Linux,我需要找出我的代码的哪一部分需要额外的字节。我尝试了一些工具,但没有效果:massif,perf,我甚至尝试了gdb突破malloc()。我可能会为malloc编写一个包装器,请求提供调用函数,但我不知道如何做到这一点 有人知道如何找到程序不同部分需要多少内存吗?如果使用自定义分配函数(malloc的包装器),可以使用gcc backtrace函数()找出哪些函数使用哪些参数调用malloc 这将告诉您正在分配的函数。从那里你可以手工将大人物分类到不同的领域 这个问题对于包装本身有很好的信息 更

我需要找出我的代码的哪一部分需要额外的字节。我尝试了一些工具,但没有效果:
massif
perf
,我甚至尝试了
gdb
突破
malloc()
。我可能会为malloc编写一个包装器,请求提供调用函数,但我不知道如何做到这一点


有人知道如何找到程序不同部分需要多少内存吗?

如果使用自定义分配函数(malloc的包装器),可以使用gcc backtrace函数()找出哪些函数使用哪些参数调用malloc

这将告诉您正在分配的函数。从那里你可以手工将大人物分类到不同的领域

这个问题对于包装本身有很好的信息

更新:
这不会捕获新/删除分配,但覆盖它们比malloc更容易!请参见此处:+关于最佳答案“别忘了其他3个版本:new[],delete[],nothrow”的非常重要的注释。

您可以创建一个宏来调用libc malloc并打印分配的详细信息

#define malloc( sz ) (\
{\
    printf( "Allocating %d Bytes, File %s:%d\n", sz, __FILE__, __LINE__ );\
    void *(*libc_malloc)(size_t) = dlsym(RTLD_NEXT, "malloc");\
    printf("malloc\n");\
    void* mem = libc_malloc(sz);\
    mem; // GCC-specific statement-expression \
}

这应该(touch-wood)被调用来代替真正的malloc,并吐出分配的字节数和分配发生的位置。像这样返回MeM是GCC特定的。

您是指<代码> MARROCK()/<代码>,还是它是代码>新的/删除/代码>?这会导致问题吗?会捕获C++新的/删除调用吗?