讨论:MQX系统中内存的alloc与Free
今天在调试的时候,出现一个很奇怪的问题,我在初始化线程中初始化SPI Flash驱动的时候,申请了一块Buff做为缓存,结果在我要应用的时候,发现那块缓存不翼而飞了,造成程序死机,查了整整一下午,才发现是因为我的初始化线程做完事情后自己释放了,然后把在线程中申请的所有内存全部也释放了!我没注意过其它的操作系统有没有这种现像?所以想跟大家一起讨论一下! 是个沙发哦 qinshiysb 发表于 2014-8-24 23:19
是个沙发哦
估计大家都睡了!{:titter:} wangpengcheng 发表于 2014-8-24 23:26
估计大家都睡了!
是的哇,,,要上班的都差不多了,只有学生还放暑假 记得会这样,操作系统的线程在执行完成后,是会释放掉申请的存储 wxfje 发表于 2014-8-24 23:34
记得会这样,操作系统的线程在执行完成后,是会释放掉申请的存储
这样子的话初始化线程中也不能申请内存啊!有一些变量必须提前初始化,呵呵,搞到我现在初始化线程还不能释放了! 明早继续讨论 qwert1213131 发表于 2014-8-24 23:37
明早继续讨论
我一般起来就十点多了{:titter:} 线程结束当然要释放它占用的内存了,正常的操作系统都应该是这样 MQX好像是有这功能的,RTX没有 MQX功能很强大的,可以详细看一遍它的文档,较RTX强大很多 tim 发表于 2014-8-24 23:38
线程结束当然要释放它占用的内存了,正常的操作系统都应该是这样
不仅仅是他占用的内存,关键是我从内存池里申请的,也被它给释放了! 这是原则性错误,期待明早出答案。 zhangchaoying 发表于 2014-8-24 23:51
这是原则性错误,期待明早出答案。
或许我应该将驱动放到BSP中去编译,呵呵!这样申请的内存就不会被干掉了! 我觉得应该公用的缓存在驱动里面开,专用的缓存在应用里面开 sunnyqd 发表于 2014-8-24 23:39
MQX好像是有这功能的,RTX没有
是的,rtx没有,一般进程结束会释放资源,没想到线程结束也是这样 tim 发表于 2014-8-25 00:12
我觉得应该公用的缓存在驱动里面开,专用的缓存在应用里面开
我就是在全局内存池里开的,呵呵! myxiaonia 发表于 2014-8-25 07:42
是的,rtx没有,一般进程结束会释放资源,没想到线程结束也是这样
MQX很强大,我刚看到它的资料的时候,很吃惊 MQX不懂,搬板凳来学习。
MQX不懂,来学习。 tim 发表于 2014-8-25 00:12
我觉得应该公用的缓存在驱动里面开,专用的缓存在应用里面开
又一次发现MQX的强大,呵呵,其实我用的分配函数是_mem_malloc,刚才发现他还有一个_mem_malloc_system函数,换掉之后没有问题了,真是你说的这样,呵呵! sunnyqd 发表于 2014-8-25 10:29
MQX很强大,我刚看到它的资料的时候,很吃惊
哦,这样子啊,貌似本坛还没有比较结果啊
以前eric2013有过几个rtos的比较,rtx、freertos、ucos等等,但是没有mqx的 myxiaonia 发表于 2014-8-25 11:31
哦,这样子啊,貌似本坛还没有比较结果啊
以前eric2013有过几个rtos的比较,rtx、freertos、ucos等等, ...
你写一份,就一个精华了 wangpengcheng 发表于 2014-8-25 11:15
又一次发现MQX的强大,呵呵,其实我用的分配函数是_mem_malloc,刚才发现他还有一个_mem_malloc_system函 ...
看来楼主第一次申请内存是在线程内申请的,而不是申请全局的。那我想问下,用C自带的申请内存是不是就是全局的申请呢 wangpengcheng 发表于 2014-8-25 11:15
又一次发现MQX的强大,呵呵,其实我用的分配函数是_mem_malloc,刚才发现他还有一个_mem_malloc_system函 ...
看来楼主第一次申请内存是在线程内申请的,而不是申请全局的。那我想问下,用C自带的申请内存是不是就是全局的申请呢 wxfje 发表于 2014-8-25 12:45
看来楼主第一次申请内存是在线程内申请的,而不是申请全局的。那我想问下,用C自带的申请内存是不是就是 ...
没有试过,呵呵! wangpengcheng 发表于 2014-8-25 12:50
没有试过,呵呵!
可能喜欢不同吧,我平时喜欢用C自带的分配存储
页:
[1]