Memory leaks 嵌入式系统中的内存泄漏

Memory leaks 嵌入式系统中的内存泄漏,memory-leaks,embedded,Memory Leaks,Embedded,我需要检查嵌入式系统中的内存泄漏 IDE是HEW,我们正在使用UCOSII RTOS Valgrind不支持上述配置。您能推荐一种检查内存泄漏的工具或方法吗?您的要求并不完全清楚。如果您正在寻找可以在您的环境中找到内存泄漏的工具,如valgrind;这很难找到 如果您有一些代码,那么您可以检查特定应用程序中的所有内存分配和释放内存。作为 另外,通过执行一些文件,您可以找到内存泄漏 http://code.axter.com/debugalloc.cpp http://code.axter.com

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

IDE是HEW,我们正在使用UCOSII RTOS


Valgrind不支持上述配置。您能推荐一种检查内存泄漏的工具或方法吗?

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

如果您有一些代码,那么您可以检查特定应用程序中的所有内存分配和释放内存。作为

另外,通过执行一些文件,您可以找到内存泄漏

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
debugalloc.*代码能够跟踪内存泄漏,并且 注释中的说明和使用信息

debuglogger.*代码中有一些用于分析代码的代码

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


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

如果您有一些代码,那么您可以检查特定应用程序中的所有内存分配和释放内存。作为

另外,通过执行一些文件,您可以找到内存泄漏

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
debugalloc.*代码能够跟踪内存泄漏,并且 注释中的说明和使用信息

debuglogger.*代码中有一些用于分析代码的代码

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


在嵌入式系统中动态分配内存的第一条规则是不要。在执行开始时将其全部分配一次,然后将其单独放置。否则,当malloc或类似操作失败时,您必须评估并决定要做什么


如果您必须在运行时动态分配内存,那么最简单的情况下,您可以使用日志记录基础设施,通过在malloc/free调用周围编写包装来跟踪这些调用。然后,您可以跟踪分配和取消分配发生的时间和地点,并希望看到缺少了什么。

在嵌入式系统中动态分配内存的第一条规则是不要。在执行开始时将其全部分配一次,然后将其单独放置。否则,当malloc或类似操作失败时,您必须评估并决定要做什么

如果您必须在运行时动态分配内存,那么最简单的情况下,您可以使用日志记录基础设施,通过在malloc/free调用周围编写包装来跟踪这些调用。然后,您可以跟踪分配和解除分配发生的时间和地点,并希望看到缺少了什么。

看看Samba中使用的核心内存分配器。如果您没有atexit或stdio.h,它可能不适合您,但将其移植到您的环境中不需要太多工作

请看一下和,以及其他一些内容,让您开始学习。

看看Samba中使用的核心内存分配器。如果您没有atexit或stdio.h,它可能不适合您,但将其移植到您的环境中不需要太多工作


请看一下和其他内容,让您开始学习。

我一直在思考这个问题,下面是一个如何使用嵌入式系统的随机尝试: *首先,您需要检查哪个螺纹发生泄漏。在执行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

在此之后,不时运行程序并打印不断增长的分配。这将有助于发现内存泄漏


另外,我没有测试这个,但我看到有人在我们的代码中做了类似的事情:

我一直在思考这个问题,下面是一个如何使用嵌入式系统的随机尝试: *首先,您需要检查哪个螺纹发生泄漏。在执行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

在此之后,不时运行程序并打印不断增长的分配。这将有助于发现内存泄漏


S.I没有测试这个,但是我看到有人在我们的代码中做了类似的事情:

除了处理失败的MALLC之外,您还必须考虑。
malloc不是确定性操作的事实。换句话说,MALLC占用的时间可能会从一个调用改变到下一个调用,这样会导致您错过实时的期限。除了处理失败的MALLC之外,还必须考虑MALOC不是确定性操作的事实。换句话说,malloc所花费的时间可能会从一个呼叫变为下一个呼叫,因此可能会导致您错过实时截止日期。。。