新手请教 uclinux 内寸的问题 在线等~~

alex_hx 2009-03-30 11:00:29
平台是upnetarm3000(8M sdram) CPU是s3c44b0x
移植upnp协议的库
在PC机上完成交叉编译的程序是470K左右
为什么在板子上运行的时候就错误 说内存不够 提示信息大致是说512页的内存都用光了 没有可以kill的进程了
但是 手上另一个400K左右的使用其他库的示例程序就可以顺利运行

请问可能是什么原因啊
...全文
120 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
嵌云阁主 2009-04-01
  • 打赏
  • 举报
回复
极有可能。如果频繁分配回收内存,通常都要自己写管理算法,直接把malloc和free替换为自己的函数。
嵌云阁主 2009-03-31
  • 打赏
  • 举报
回复
查一下启动信息里的内存状况显示。看看是哪部分占用的内存过多。或者把你的启动信息贴出来看看。
alex_hx 2009-03-31
  • 打赏
  • 举报
回复
自己顶一下。。。。
alex_hx 2009-03-31
  • 打赏
  • 举报
回复
用free命令看过了 启动后还有3.6M左右的内存
我用一个很简单的程序一次性malloc 3Md内存都可以成功 但是这个移植了upnp库的程序需要512pages而不能运行 我认为是由于内存碎片导致的 因为程序里100多次调用了malloc来申请大小不等的内存 而uclinuc没有MMU 所以就造成了这样的情况
不知道这样推测有没有道理。。。 如果是这样的话该怎恶魔解决呢? 自己一次性替程序申请2M内存 然后自己管理?
alex_hx 2009-03-30
  • 打赏
  • 举报
回复
这个我懂 可是8M sdram啊 怎么会不够。。。
嵌云阁主 2009-03-30
  • 打赏
  • 举报
回复
编译完的代码大小仅表示把代码加载到内存而不运行的空间,程序运行后可能还需要动态分配内存。
即使不动态分配内存,在代码里面可能存在一些bss段,这个段不占代码空间,但是加载到内存时却是要占用空间的。
alex_hx 2009-03-30
  • 打赏
  • 举报
回复
补充下错误信息
Allocation of 512 pages failed
Allocation of length 2097152 from process 39 failed
Buffer memory:728KB
Active:0 inactive:207 free:354
Free pages:354pages(1416KB),%2Frag,%0Slack
*****:acclocatopn of 512 pages failed
Kernel panic:out of memory


很明显就是内存不够 我疑问在于:为什么只有354pages的空闲内存?sdram有8M啊

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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