搜索
bottom↓
回复: 9

请问malloc的问题

[复制链接]

出0入0汤圆

发表于 2012-2-27 17:22:41 | 显示全部楼层 |阅读模式
请问在UCOS中如果更改malloc的大小限制?
CPU是L138,RAM为32MB的DDR2,分配给数据段为24MB,操作系统为UCOS。
在一个任务中malloc(2048),结果返回失败,改为malloc(1600),则返回成功,此任务的堆栈尺寸已经设置为32KB。
malloc的大小限制由谁控制?操作系统还是编译器?
因为malloc是C的标准库,所以我认为应该是编译器的问题。
但如果是由UCOS操作系统决定,那请问在哪里更改?
谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-2-27 17:32:31 | 显示全部楼层
首先,堆和栈是有区别的,malloc是从堆里面分配空间的,一般也就是从heap空间分配的。
在ucos下有一部分内存管理,在这个里面应该也会有模拟内存动态分配的内容(这个没研究过,是猜的)。
这么大容量的RAM,势必要做内存管理的。

出0入0汤圆

发表于 2012-2-27 21:34:09 | 显示全部楼层
所以说发明“堆栈”这个词的该拖出去TJJTDS.

ucos有自己的内存管理,但是需要自己划分一段内存供它使用,其实就是一个内存池。
malloc是编译器实现。

出0入0汤圆

 楼主| 发表于 2012-2-28 14:13:44 | 显示全部楼层
谢谢楼上的兄弟。
不过还是没有搞明白在哪里修改,能够解决malloc(2048)失败。
还请高手教一教。谢谢!

出0入0汤圆

发表于 2012-2-29 16:59:20 | 显示全部楼层
回复【3楼】tanbin  
-----------------------------------------------------------------------

看你用什么编译器,针对不同的编译器修改堆的大小

出0入0汤圆

发表于 2012-2-29 17:02:10 | 显示全部楼层
3个byte你也去malloc,有这个必要吗?直接在栈里不就可以了
仔细去看看malloc的函数,malloc用多了就会出现申请失败的情况
举个例子,假如有一个210字节的堆,如果你malloc 200的话会成功,但如果你malloc 100后free,此时再malloc 200就会失败
所以malloc失败要么是内存不足,要么是内存碎片,也就是不连续造成的。
LZ的malloc失败和任务的任务栈大小没有关系,任务的任务栈是全局变量,没必要给32K

malloc是在运行阶段分配的,不是编译阶段实现的。

另:如果是ucos,可以用它自带的内存管理,不会产生上述的内存碎片问题

出0入0汤圆

发表于 2012-2-29 17:21:29 | 显示全部楼层
回复【6楼】gold  
-----------------------------------------------------------------------
关于malloc会产生内存碎片的问题倒是一直没有关注过,有空试一下。针对这种内存碎片有没有什么解决的方法?

出0入0汤圆

发表于 2012-2-29 18:07:40 | 显示全部楼层
回复【7楼】yfpbird
回复【6楼】gold   
-----------------------------------------------------------------------
关于malloc会产生内存碎片的问题倒是一直没有关注过,有空试一下。针对这种内存碎片有没有什么解决的方法?

-----------------------------------------------------------------------

不用标准的就是了,如果没有OS,我是申请一个全局数组作为共享缓存来使用的,注意中断和其他函数之间别冲突就是了

出0入0汤圆

发表于 2012-3-1 00:26:39 | 显示全部楼层
楼主的ID跟我的好像。。。

出0入0汤圆

发表于 2012-3-1 09:00:53 | 显示全部楼层
回复【9楼】tabing
-----------------------------------------------------------------------

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

本版积分规则

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

GMT+8, 2024-8-26 01:19

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

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