我有一个非常独特的问题,我在一个基于Octeon硬件的特殊硬件上运行Linux。 我看到我的进程在执行特定操作时一直分配内存。 我想跟踪代码的哪一部分正在进行此调用。
这里是关于我的环境的细节
但是,这是我需要解决的选项/限制。
请build议是否有一些方法去做这件事。
非常感谢。
另外一个我忘记提到的是,进程的虚拟内存增加到1.4GB,在这个时候,停止了,并且我看到代码中的分配失败了。 这是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; }
同样,你也可以free
地映射你自己的功能。
您可以维护已分配地址的列表,并继续在malloc
添加新条目,并free
从列表中删除相关条目。 该方案结束时列在名单上的还有地点泄漏的记忆。
你可能想看看Dmalloc 。 应该比valgrind更少的架构依赖。