malloc问题请教???

qys2008 2008-03-27 12:41:02
我的程序运行到malloc(1024*1024*10)时出错!在出错的代码前设置断点,在shell下发现malloc(1024*1024*1)成功,逐步增加到5M时出错:
machine check
program counter: 0x793268
machine status: 0x4b000
8285fc vxTaskEntry +60 : 7c41b4 ([])
7c425c wdbFuncCallLibInit+158: malloc ([])
79334c malloc +1c : memPartAlloc ([])
792d3c memPartAlloc +6c : memPartAlignedAlloc ([])
792b64 memPartAlignedAlloc+19c: 7931ac ([])
pp = 0x13b8290: value = 0 = 0x0
用memShow察看:
SUMMARY:
status bytes blocks avg block max block
------ --------- -------- ---------- ----------
current
free 64075584 3 21358528 64060728
alloc 49459536 20418 2422 -
cumulative
alloc 55477152 22756 2437 -

内存有的是,大概是堆中找不到10M的连续空间了,请问有没有办法解决???
...全文
674 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
luming15 2012-04-16
  • 打赏
  • 举报
回复
恩,用memory pool来保证大块的malloc很有必要。
ss20870255 2012-04-11
  • 打赏
  • 举报
回复
新手来学习了
singing1001 2012-04-05
  • 打赏
  • 举报
回复
方法有两种:
1)自己使用memory pool做内存管理
2)启动MMU,使用vmalloc。
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
lz要干嘛?
yjpcn 2008-04-12
  • 打赏
  • 举报
回复

我用malloc也经常分配不到内存,可明明内存有的是!!

不知道用malloc是需要那些注意事项???

哪位大侠指教一下啊???
chinaf117 2008-04-10
  • 打赏
  • 举报
回复
同时问一个问题,在malloc之前,是否需要现申请一块内存池?还是直接malloc就行?如果需要申请内存池,使用什么函数申请?谢谢!!
  • 打赏
  • 举报
回复
for (i=0,i>=5,i**)
malloc(1024*1024*1);
qys2008 2008-03-28
  • 打赏
  • 举报
回复
我的系统用的是vxworks,没有定义MMU,内存128M,程序出错前还剩余60多兆。
看来malloc出错并非是系统内存不足了,也不是分配不到连续空间的问题。若是mallo分配的是一个任务的heap区,那么说如果可以修改或指定一个任务的heap区大小,就可以分配较大的空间了。如何修改呢???
kukumouse 2008-03-28
  • 打赏
  • 举报
回复
之前使用了balloc分配不到35*1024内存,现在改用mollec就可以分配了.
wuyuncxl 2008-03-28
  • 打赏
  • 举报
回复
VxWorks的malloc和free会导致内存碎片。
我们都是自己做内存管理的。
kukumouse 2008-03-27
  • 打赏
  • 举报
回复
lz启用了mmu功能吗?我的应用没有启用mmu,不存在虚拟内存,全实地址操作.

hbt19860104 :
如果是我的这种情况应该怎么分析?
helenhf 2008-03-27
  • 打赏
  • 举报
回复
vxworks下分配的都是系统内存,不存在虚拟内存这一说
hbt19860104 2008-03-27
  • 打赏
  • 举报
回复
malloc分配的是虚拟内存,系统为每个进程分配的虚拟内存空间是固定的,而malloc分配的是这段空间里的heap区,所以是很小的,因此malloc不可能让你分配太大的空间。还有一个,比如说每个进程的heap区是5M,那就不能用malloc分配超过5M的虚拟空间。但是,假如说你的物理内存只剩3M,而你用malloc分配4M空间的时候会不会成功呢?答案是会的,因为malloc只分配虚拟内存,而不分配物理内存,但是当你使用分配的这段空间时,因为系统要为它分配物理内存,所以就可能因物理内存不够而失败。
kukumouse 2008-03-27
  • 打赏
  • 举报
回复
我也遇到同样的问题.
设备是16m内存,memshow出来free的还有10m左右,可是我molloc(100*1024)返回值都为0了,难道100k的连续内存空间都没有了吗?
顺便问下memShow 的max block 是什么意思啊?
yangb2014# 2008-03-27
  • 打赏
  • 举报
回复
不能一次malloc太大的空间,并且一定要加入出错判断,

可以事先定义静态数组啊,如果还不行就调整下BSP中的有关定义,

2,179

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧