嵌入式系统中的内存泄漏

时间:2013-02-19 10:40:43

标签: memory-leaks embedded

我需要检查嵌入式系统中的内存泄漏。

IDE是HEW,我们正在使用uCOSIII RTOS。

Valgrind不支持上述配置。您能否建议一种工具或方法来检查内存泄漏?

4 个答案:

答案 0 :(得分:5)

在嵌入式系统中动态分配内存的第一条规则是“不要"”。在执行开始时分配一次,然后单独留下。否则,当malloc(或类似操作)失败时,您必须评估并决定要执行的操作。

如果必须在运行时动态分配内存,那么最简单的方法是,您可以使用日志记录基础结构来跟踪对malloc / free的调用,方法是在它们周围编写包装器。然后,您可以跟踪分配和解除分配的发生位置和时间,并希望看到缺少的内容。

答案 1 :(得分:1)

我一直在考虑它,这里是一个随机尝试如何使用嵌入式系统: *首先,您需要检查发生哪些线程泄漏。在进行alloc时,还应该为每个线程计算有多少活动分配。在没有解除分配的情况下,分配数量不断增长,这是可疑的任务 *其次,您需要计算来自该线程的allocs的分配数量。为此,请使用宏替换alloc。使用宏,您可以保存文件的名称和发起呼叫的行号。

例如

#define alloc(x) my_alloc(x, __LINE__, __FILE__)

void * my_alloc(size_t size, int line, char * file)
{
     // increase number of allocations and dealocations for each combination line/file
}

同样,你需要定义my_free。

在此之后,运行程序和printf不时分配不断增长。这应该有助于发现内存泄漏。

P.S。我没有对此进行测试,但我看到有人在我们的代码中做了类似的事情:)

答案 2 :(得分:0)

您的要求并不完全清楚。如果您正在寻找可以在您的环境中找到内存泄漏的“valgrind”工具;这很难找到。

如果你有一些代码,那么你可以查看所有内存分配&释放特定应用程序中的内存。作为link1 Link2

还有一些文件通过执行它们可以找到内存泄漏。

http://code.axter.com/debugalloc.cpp
http://code.axter.com/debugalloc.h

http://code.axter.com/debuglogger.cpp
http://code.axter.com/debuglogger.h

http://code.axter.com/debuglog.c
http://code.axter.com/debuglog.h
  1. debugalloc。*代码能够跟踪内存泄漏,它具有 评论中的描述和使用信息。

  2. debuglogger。*代码包含一些用于分析代码的代码。

  3. debuglog。*是一些有限的C版本代码。

答案 3 :(得分:0)

看一下libtalloc,Samba中使用的核心内存分配器。如果您没有atexit()stdio.h,它可能无法开箱即用,但将它移植到您的环境中不需要太多工作。

查看talloc_enable_leak_report_full()talloc_report_full()(以及其他内容)以帮助您入门。