搜索
bottom↓
回复: 26

讨论:MQX系统中内存的alloc与Free

[复制链接]

出0入0汤圆

发表于 2014-8-24 23:14:25 | 显示全部楼层 |阅读模式
今天在调试的时候,出现一个很奇怪的问题,我在初始化线程中初始化SPI Flash驱动的时候,申请了一块Buff做为缓存,结果在我要应用的时候,发现那块缓存不翼而飞了,造成程序死机,查了整整一下午,才发现是因为我的初始化线程做完事情后自己释放了,然后把在线程中申请的所有内存全部也释放了!

我没注意过其它的操作系统有没有这种现像?所以想跟大家一起讨论一下!

出0入0汤圆

发表于 2014-8-24 23:19:56 | 显示全部楼层
是个沙发哦

出0入0汤圆

 楼主| 发表于 2014-8-24 23:26:27 | 显示全部楼层

估计大家都睡了!

出0入0汤圆

发表于 2014-8-24 23:33:21 | 显示全部楼层

是的哇,,,要上班的都差不多了,只有学生还放暑假

出0入0汤圆

发表于 2014-8-24 23:34:21 | 显示全部楼层
记得会这样,操作系统的线程在执行完成后,是会释放掉申请的存储

出0入0汤圆

 楼主| 发表于 2014-8-24 23:35:35 | 显示全部楼层
wxfje 发表于 2014-8-24 23:34
记得会这样,操作系统的线程在执行完成后,是会释放掉申请的存储

这样子的话初始化线程中也不能申请内存啊!有一些变量必须提前初始化,呵呵,搞到我现在初始化线程还不能释放了!

出0入0汤圆

发表于 2014-8-24 23:37:06 | 显示全部楼层
明早继续讨论

出0入0汤圆

 楼主| 发表于 2014-8-24 23:37:33 | 显示全部楼层

我一般起来就十点多了

出0入93汤圆

发表于 2014-8-24 23:38:46 | 显示全部楼层
线程结束当然要释放它占用的内存了,正常的操作系统都应该是这样

出0入0汤圆

发表于 2014-8-24 23:39:10 | 显示全部楼层
MQX好像是有这功能的,RTX没有

出0入0汤圆

发表于 2014-8-24 23:39:49 | 显示全部楼层
MQX功能很强大的,可以详细看一遍它的文档,较RTX强大很多

出0入0汤圆

 楼主| 发表于 2014-8-24 23:45:15 | 显示全部楼层
tim 发表于 2014-8-24 23:38
线程结束当然要释放它占用的内存了,正常的操作系统都应该是这样

不仅仅是他占用的内存,关键是我从内存池里申请的,也被它给释放了!

出0入0汤圆

发表于 2014-8-24 23:51:33 | 显示全部楼层
     这是原则性错误,期待明早出答案。

出0入0汤圆

 楼主| 发表于 2014-8-24 23:52:59 | 显示全部楼层
zhangchaoying 发表于 2014-8-24 23:51
这是原则性错误,期待明早出答案。

或许我应该将驱动放到BSP中去编译,呵呵!这样申请的内存就不会被干掉了!

出0入93汤圆

发表于 2014-8-25 00:12:47 | 显示全部楼层
我觉得应该公用的缓存在驱动里面开,专用的缓存在应用里面开

出0入0汤圆

发表于 2014-8-25 07:42:58 来自手机 | 显示全部楼层
sunnyqd 发表于 2014-8-24 23:39
MQX好像是有这功能的,RTX没有

是的,rtx没有,一般进程结束会释放资源,没想到线程结束也是这样

出0入0汤圆

 楼主| 发表于 2014-8-25 10:10:17 | 显示全部楼层
tim 发表于 2014-8-25 00:12
我觉得应该公用的缓存在驱动里面开,专用的缓存在应用里面开

我就是在全局内存池里开的,呵呵!

出0入0汤圆

发表于 2014-8-25 10:29:49 | 显示全部楼层
myxiaonia 发表于 2014-8-25 07:42
是的,rtx没有,一般进程结束会释放资源,没想到线程结束也是这样

MQX很强大,我刚看到它的资料的时候,很吃惊

出0入0汤圆

发表于 2014-8-25 11:00:39 | 显示全部楼层
MQX不懂,搬板凳来学习。

出0入0汤圆

发表于 2014-8-25 11:05:08 | 显示全部楼层

MQX不懂,来学习。

出0入0汤圆

 楼主| 发表于 2014-8-25 11:15:31 | 显示全部楼层
tim 发表于 2014-8-25 00:12
我觉得应该公用的缓存在驱动里面开,专用的缓存在应用里面开

又一次发现MQX的强大,呵呵,其实我用的分配函数是_mem_malloc,刚才发现他还有一个_mem_malloc_system函数,换掉之后没有问题了,真是你说的这样,呵呵!

出0入0汤圆

发表于 2014-8-25 11:31:06 | 显示全部楼层
sunnyqd 发表于 2014-8-25 10:29
MQX很强大,我刚看到它的资料的时候,很吃惊

哦,这样子啊,貌似本坛还没有比较结果啊

以前eric2013有过几个rtos的比较,rtx、freertos、ucos等等,但是没有mqx的

出0入0汤圆

发表于 2014-8-25 12:00:38 | 显示全部楼层
myxiaonia 发表于 2014-8-25 11:31
哦,这样子啊,貌似本坛还没有比较结果啊

以前eric2013有过几个rtos的比较,rtx、freertos、ucos等等, ...

你写一份,就一个精华了

出0入0汤圆

发表于 2014-8-25 12:43:43 来自手机 | 显示全部楼层
wangpengcheng 发表于 2014-8-25 11:15
又一次发现MQX的强大,呵呵,其实我用的分配函数是_mem_malloc,刚才发现他还有一个_mem_malloc_system函 ...

看来楼主第一次申请内存是在线程内申请的,而不是申请全局的。那我想问下,用C自带的申请内存是不是就是全局的申请呢

出0入0汤圆

发表于 2014-8-25 12:45:09 来自手机 | 显示全部楼层
wangpengcheng 发表于 2014-8-25 11:15
又一次发现MQX的强大,呵呵,其实我用的分配函数是_mem_malloc,刚才发现他还有一个_mem_malloc_system函 ...

看来楼主第一次申请内存是在线程内申请的,而不是申请全局的。那我想问下,用C自带的申请内存是不是就是全局的申请呢

出0入0汤圆

 楼主| 发表于 2014-8-25 12:50:48 | 显示全部楼层
wxfje 发表于 2014-8-25 12:45
看来楼主第一次申请内存是在线程内申请的,而不是申请全局的。那我想问下,用C自带的申请内存是不是就是 ...

没有试过,呵呵!

出0入0汤圆

发表于 2014-8-25 13:27:02 | 显示全部楼层

可能喜欢不同吧,我平时喜欢用C自带的分配存储
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-30 11:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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