返回信息流下面是部分代码:
WD_DMA g_dmaB;
...
...
...
dwStatus = WD_DMALock(hDEMO->hWD,&g_dmaB);
if (dwStatus)
{
DEBUG_PRINTF("Could not lock down buffer\n");
return FALSE;
}
我申请的内存大小是2块4M内存,前面有个g_dmaA申请很容易成功,但申请g_dmaB的内存就总是失败(只有刚重启机器的时候会成功)。
调用Windriver的函数WD_DMALock来申请内存。
WD_DMALock返回值非0则表示内存申请失败,那如果失败以后我应该怎么去处理?现在失败后直接返回的话程序运行就不正常了。
PS:内存申请失败的原因是什么?
求大牛救命!!!
这是一条镜像帖。来源:北邮人论坛 / soft-design / #39342同步于 2010/9/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
内存申请失败该怎么处理啊
jiangj
2010/9/30镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
内存耗尽?看代码,猜嵌入式开发。。。内存够大不?
唔,我猜,可能是这样的,之前的申请的某内存块(设为A),对这个块A的读写超出了块A的大小,破坏了malloc函数库例程内部使用的一些数据结构,而这就很可能导致之后malloc调用失败。 建议检查一下之前的调用。
菜鸟帮顶~
内存应该没用完,看了下,还剩200+M的内存没用....
dmalock这个函数要求分配的是一段连续的内存,不知道为什么有200+M的余量,但就是申请失败
【 在 zxsword 的大作中提到: 】
: 内存耗尽?看代码,猜嵌入式开发。。。内存够大不?
: 唔,我猜,可能是这样的,之前的申请的某内存块(设为A),对这个块A的读写超出了块A的大小,破坏了malloc函数库例程内部使用的一些数据结构,而这就很可能导致之后malloc调用失败。 建议检查一下之前的调用。
: 菜鸟帮顶~
要不,试下连续申请,先申请第一个块,紧接着申请第二个块=。=
看能成功不能?如果能的话,那就该检查一下,申请第一个块之后,使用第一个块的代码了
malloc库例程维护内部的空闲内存块链表什么的,可能是因为写超出了第一个内存块,然后导致malloc内部维护的数据结构的损坏,我只能想到这个了。。。
【 在 jiangj 的大作中提到: 】
: 内存应该没用完,看了下,还剩200+M的内存没用....
: dmalock这个函数要求分配的是一段连续的内存,不知道为什么有200+M的余量,但就是申请失败
: 【 在 zxsword 的大作中提到: 】
: ...................
现在只能这样猜测.....
但就算是碎片太多,该怎么去处理还是不知道...
【 在 FadeToBlack 的大作中提到: 】
: 内存碎片太多了,没有足够的连续内存?
re...回复的帖子没保存丢了....
先写个allocator确认一下碎片问题,查看一下申请失败时的内存使用情况,同时确认不是因为内存越界写坏了allocator中的结构导致出错
如果确认是碎片问题,合并小块内存申请或改为使用栈空间;如果rtl提供memory compact功能就更简单一些
申请内存用的函数 是 用 windriver上面封装好的函数....不知道他上面是怎么去申请的啊
【 在 FadeToBlack 的大作中提到: 】
: re...回复的帖子没保存丢了....
: 先写个allocator确认一下碎片问题,查看一下申请失败时的内存使用情况,同时确认不是因为内存越界写坏了allocator中的结构导致出错
: 如果确认是碎片问题,合并小块内存申请或改为使用栈空间;如果rtl提供memory compact功能就更简单一些
再mangle一层呗
【 在 jiangj 的大作中提到: 】
: 申请内存用的函数 是 用 windriver上面封装好的函数....不知道他上面是怎么去申请的啊
: 【 在 FadeToBlack 的大作中提到: 】
: : re...回复的帖子没保存丢了....
: ...................