Pav*_*ore 4 c linux debugging memory-leaks mmap
我有一个非常独特的问题,我在一个特殊的硬件上运行Linux,这是一个基于Octeon的硬件.我看到我的进程在执行特定操作时不断分配内存.我想跟踪代码的哪一部分正在进行此调用.
这是有关我的环境的详细信息
但是,这是我需要解决的选项/限制.
请建议是否有办法解决这个问题.
非常感谢.
另一件事我忘了提到,进程的虚拟内存继续增加到1.4GB,然后停止,我看到代码中的alloc会因ENOMEM而失败.这个1.4 GB的限制是否与32位机器有关?AFAIU 32位机器应该允许每个进程3 GB的虚拟内存不是吗?此外,没有每个进程限制,我已经使用setrlimit/getrlimit确认了这一点.
干杯,帕万
如果你想编写一个包装函数malloc
,你可以这样做,而无需修改代码中调用函数的每个实例,一个简单的宏技巧就足够了:
void* my_malloc(size_t size, const char *file, int line, const char *func);
#define malloc(X) my_malloc( X, __FILE__, __LINE__, __FUNCTION__)
void* my_malloc(size_t size, const char *file, int line, const char *func)
{
void *p = malloc(size);
printf ("Allocated = %s, %i, %s, %p[%li]\n", file, line, func, p, size);
/*Link List functionality goes in here*/
return p;
}
Run Code Online (Sandbox Code Playgroud)
同样,您也可以映射free
以调用自己的函数.
您可以维护已分配地址的列表,并继续在列表中添加新条目malloc
并从中删除相关条目free
.程序结束时列表中剩下的内容是泄漏内存和位置.