OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8594|回复: 7

[检查内存泄露] 像STM32这样的单片机怎么检查内存泄露。

[复制链接]

8

主题

97

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
17563
金钱
17563
注册时间
2016-1-20
在线时间
63 小时
发表于 2016-11-17 09:38:30 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 YMC 于 2016-11-17 09:40 编辑

如题 ,像单片机这样的程序,有没有检查其内存泄露的工具和方法。
网上搜了很多的工具,比如 Valgrind ,用了之后只知道检查linux下的可执行程序,来检查其源码有没有内存泄露。

如果有数组越界和内存泄露都是能跟踪到源码的。但是单片机这样的程序,在linux下该怎么编译处理,真的想不到什么方法。
或是在windows下有没有这种检测工具和方法,网友们有没有这方面的经验,传授下。

------------------------------------------------------------------------------------------------------------------------------
网上Valgrind检查内存泄露的例子 ,和查找结果,这种是gcc编译出的可执行程序来检查内存泄露
------------------------------------------------------------------------------------------------------------------------------

[mw_shl_code=c,true]#include <stdlib.h>  
int* func(void)  
{  
   int* x = malloc(10 * sizeof(int));
   x[10] = 0;  //问题1: 数组下标越界
}                    
int main(void)  
{  
   int* x=NULL;  
   x=func();  
   //free(x);   
   x=NULL;  
   return 0;   //问题2: 内存没有释放
} [/mw_shl_code]

说明
Invalid write of size 4:表示数组越界写了4字节
40 bytes in 1 blocks:表示因程序退出而发生内存泄露40字节


最佳答案

查看完整内容[请看2#楼]

不停的打印printf,将内存百分比打印出来,观察就知道结果了
---------------------------------------------------
个人论坛博客:macian.cn
个人淘宝小店:macian.taobao.com
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-11-17 09:38:31 | 显示全部楼层
不停的打印printf,将内存百分比打印出来,观察就知道结果了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

58

主题

6296

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11600
金钱
11600
注册时间
2014-4-1
在线时间
1326 小时
发表于 2016-11-17 10:10:42 | 显示全部楼层

头次听说“内存泄漏”,围观。


回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-17 10:16:24 | 显示全部楼层
本帖最后由 小陀螺爱炒蛋 于 2016-11-17 10:27 编辑

首先,STM32常用的IC是无法运行linux系统的(F7我不确认),在单片机这么小ram的系统上,是不推荐使用标准的malloc和free函数的,因为标准库的算法会导致内存的不连续,导致内存本来够用,却无法分配内存的现象(MMU很重要,Linux也是需要有MMU才可以运行的)。所以一般都是自己分配一个内存池来实现动态内存的管理~其次,对于题主的问题,如何防止内存泄露,在这种小系统上开发更多依托的不是工具,而且开发人员的软件设计和开发习惯来做边界检查。对于内存越界的情况,stm32设计了hardfault中断的机制,用于检查一些内存非法操作~另外,如果你使用了arm自家的RTOS,KEIL提供了堆栈检查的一些代码和工具,可以帮助你检查rtos的内存状况。PS:一般对于内存的检查在linux系统上是依靠工具的,google的gtest是一套专门用于C/C++白盒测试的软件框架,有完善的内存检查功能,题主可以了解下,当然也是运行在linux系统下的工具
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-17 11:51:06 | 显示全部楼层
从不使用分配内存指令,哪里来的内存泄漏.
回复

使用道具 举报

8

主题

97

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
17563
金钱
17563
注册时间
2016-1-20
在线时间
63 小时
 楼主| 发表于 2017-4-6 15:18:59 | 显示全部楼层
小陀螺爱炒蛋 发表于 2016-11-17 10:16
首先,STM32常用的IC是无法运行linux系统的(F7我不确认),在单片机这么小ram的系统上,是不推荐使用标准 ...

谢谢详细的解释和介绍
---------------------------------------------------
个人论坛博客:macian.cn
个人淘宝小店:macian.taobao.com
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-6-14
在线时间
18 小时
发表于 2017-6-19 19:21:57 | 显示全部楼层
正点原子 发表于 2016-11-17 09:38
不停的打印printf,将内存百分比打印出来,观察就知道结果了

请问原子哥综合实验不用官方malloc是不是因为经常导致内存泄漏?
回复

使用道具 举报

29

主题

311

帖子

0

精华

高级会员

Rank: 4

积分
747
金钱
747
注册时间
2016-5-21
在线时间
199 小时
发表于 2017-6-19 19:28:56 | 显示全部楼层
检查内存泄漏根硬件没关系,是纯软件的,其他C程序检查内存泄漏的工具都可以用到这个上面来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-18 02:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表