单片机上Cjson使用malloc,结果掉坑里了。。。。

2020-01-01 17:39发布

使用了cJson,需要使用malloc,free来动态申请内存是否内存,堆配了2k。
平时使用一直未发现问题。最近进行压力测试,压力测试后,内存就申请不出来,json解析失败。

malloc的实现是c的标准库,一直非常相信标准库,现在回想起来,单片机用malloc真的容易出问题。  不知道大家的使用怎么样?有正常无故障的使用的吗?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
22条回答
88mw300
1楼-- · 2020-01-02 11:00
可以用lwip里边重写malloc,  单片机最好不要用系统自带malloc, 内存太小,没几下子就玩完。
Excellence
2楼-- · 2020-01-02 13:20
 精彩回答 2  元偷偷看……
315936392
3楼-- · 2020-01-02 13:21
hyz_avr 发表于 2017-1-14 11:30
自己先搜一下内存碎片是怎么产生的,什么情况下会申请不了,这些基本的概念就算不能google,百度还是搜得到 ...

malloc的调用并非自己调用,而是第三方的cJson或者其他程序调用,这个不是自己能控制的。
笑笑我笑了
4楼-- · 2020-01-02 16:46
315936392 发表于 2017-1-14 11:57
malloc的调用并非自己调用,而是第三方的cJson或者其他程序调用,这个不是自己能控制的。 ...

#define malloc my_malloc
redroof
5楼-- · 2020-01-02 21:35
笑笑我笑了 发表于 2017-1-14 12:22
#define malloc my_malloc

直接冲掉编译器自带的malloc都行,只要在你的工程里定义一个相同名字的即可。
这样就算你工程里有个别人的lib而不是源码,也有效。
如果define名字则对已编译好的obj或者库无效。
lswood
6楼-- · 2020-01-03 02:17
用伙伴算法自己写一个malloc吧,分配时间可确定,free回收算法可以合并为大块。

一周热门 更多>