wangpengcheng 发表于 2014-8-24 23:14:25

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

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

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

qinshiysb 发表于 2014-8-24 23:19:56

是个沙发哦

wangpengcheng 发表于 2014-8-24 23:26:27

qinshiysb 发表于 2014-8-24 23:19
是个沙发哦

估计大家都睡了!{:titter:}

qinshiysb 发表于 2014-8-24 23:33:21

wangpengcheng 发表于 2014-8-24 23:26
估计大家都睡了!

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

wxfje 发表于 2014-8-24 23:34:21

记得会这样,操作系统的线程在执行完成后,是会释放掉申请的存储

wangpengcheng 发表于 2014-8-24 23:35:35

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

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

qwert1213131 发表于 2014-8-24 23:37:06

明早继续讨论

wangpengcheng 发表于 2014-8-24 23:37:33

qwert1213131 发表于 2014-8-24 23:37
明早继续讨论

我一般起来就十点多了{:titter:}

tim 发表于 2014-8-24 23:38:46

线程结束当然要释放它占用的内存了,正常的操作系统都应该是这样

sunnyqd 发表于 2014-8-24 23:39:10

MQX好像是有这功能的,RTX没有

sunnyqd 发表于 2014-8-24 23:39:49

MQX功能很强大的,可以详细看一遍它的文档,较RTX强大很多

wangpengcheng 发表于 2014-8-24 23:45:15

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

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

zhangchaoying 发表于 2014-8-24 23:51:33

   这是原则性错误,期待明早出答案。

wangpengcheng 发表于 2014-8-24 23:52:59

zhangchaoying 发表于 2014-8-24 23:51
这是原则性错误,期待明早出答案。

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

tim 发表于 2014-8-25 00:12:47

我觉得应该公用的缓存在驱动里面开,专用的缓存在应用里面开

myxiaonia 发表于 2014-8-25 07:42:58

sunnyqd 发表于 2014-8-24 23:39
MQX好像是有这功能的,RTX没有

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

wangpengcheng 发表于 2014-8-25 10:10:17

tim 发表于 2014-8-25 00:12
我觉得应该公用的缓存在驱动里面开,专用的缓存在应用里面开

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

sunnyqd 发表于 2014-8-25 10:29:49

myxiaonia 发表于 2014-8-25 07:42
是的,rtx没有,一般进程结束会释放资源,没想到线程结束也是这样

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

浪里白条 发表于 2014-8-25 11:00:39

MQX不懂,搬板凳来学习。

DiaoMao_Huang 发表于 2014-8-25 11:05:08


MQX不懂,来学习。

wangpengcheng 发表于 2014-8-25 11:15:31

tim 发表于 2014-8-25 00:12
我觉得应该公用的缓存在驱动里面开,专用的缓存在应用里面开

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

myxiaonia 发表于 2014-8-25 11:31:06

sunnyqd 发表于 2014-8-25 10:29
MQX很强大,我刚看到它的资料的时候,很吃惊

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

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

sunnyqd 发表于 2014-8-25 12:00:38

myxiaonia 发表于 2014-8-25 11:31
哦,这样子啊,貌似本坛还没有比较结果啊

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

你写一份,就一个精华了

wxfje 发表于 2014-8-25 12:43:43

wangpengcheng 发表于 2014-8-25 11:15
又一次发现MQX的强大,呵呵,其实我用的分配函数是_mem_malloc,刚才发现他还有一个_mem_malloc_system函 ...

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

wxfje 发表于 2014-8-25 12:45:09

wangpengcheng 发表于 2014-8-25 11:15
又一次发现MQX的强大,呵呵,其实我用的分配函数是_mem_malloc,刚才发现他还有一个_mem_malloc_system函 ...

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

wangpengcheng 发表于 2014-8-25 12:50:48

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

没有试过,呵呵!

wxfje 发表于 2014-8-25 13:27:02

wangpengcheng 发表于 2014-8-25 12:50
没有试过,呵呵!

可能喜欢不同吧,我平时喜欢用C自带的分配存储
页: [1]
查看完整版本: 讨论:MQX系统中内存的alloc与Free