关于wince系统的内存碎片,收集贴

dch4890164 2008-12-10 12:40:57
加精
做这个项目以来,多次在wince系统下遇到过内存碎片,这个东西非常可怕
先说我的:
wince下gdi资源频繁创建回收会出现内存碎片
内存动态分配回收频繁会产生内存碎片
频繁的刷屏,过多的使用invalidate等函数也能产生内存碎片
最好能将WM_ERASEBKGND的响应函数OnEraseBkgnd阻截修改成return true;
克服内存最有效的方法是程序只有一次内存申请,并且只有一次释放(当然这需要程序框架上做保障)
应用领域:
我是做运动控制软件的,实时性和稳定性要求较高,长期运行,程序需要频繁刷屏
大家来说一说自己的认识吧,呵呵痛苦的滋味,你是否有体会
...全文
2207 76 打赏 收藏 转发到动态 举报
写回复
用AI写文章
76 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaxuhongyu 2011-12-18
  • 打赏
  • 举报
回复
mark一下,学习ing
轻描淡写Sophia 2011-11-16
  • 打赏
  • 举报
回复
学习了~~THX~
tyson 2011-07-20
  • 打赏
  • 举报
回复
内存碎片是个老大难问题。。
lijianli9 2010-12-16
  • 打赏
  • 举报
回复
学习,刚入门WINCE
shetianlang2010 2010-11-17
  • 打赏
  • 举报
回复
mark
用户 昵称 2010-09-25
  • 打赏
  • 举报
回复
换个想法问题解决不少,
flowlight 2008-12-31
  • 打赏
  • 举报
回复
[Quote=引用 67 楼 dch4890164 的回复:]
引用 59 楼 flowlight 的回复:
1、内存碎片问题在现在的各种操作系统都存在,并不是WINCE上独有的,具体可以去看操作系统原理中的内存管理策略章节
2、因为应用的不同,应用程序对内存使用上有两种不同角度:要使用时才申请,用完后就立即释放;可以先申请,要使用时就直接用,用完也不释放,完全不用时才释放
前者通常用于商业性质的软件开发,多应用共同使用计算机全局内存,优点很明显,因需要时在占有资源,内存等资源环…
[/Quote]

1.为需要频繁伸缩内存的模块申请足内存,那样就变成了频繁使用内存,而不是频繁申请/释放内存了.
创造不波动的嵌入式全局内存环境,为什么要这样,可以去查阅操作系统的内存管理策略
2.避免一次申请大块内存,应多次申请多个小块内存,可以提高内存申请的有效性.
如需要总数256K的内存,不要申请一块256K的内存,可申请256块1K的内存,为什么要这样,可以去查阅操作系统的内存管理策略
dch4890164 2008-12-23
  • 打赏
  • 举报
回复
加分
e01620230 2008-12-22
  • 打赏
  • 举报
回复
up
dch4890164 2008-12-22
  • 打赏
  • 举报
回复
[Quote=引用 59 楼 flowlight 的回复:]
1、内存碎片问题在现在的各种操作系统都存在,并不是WINCE上独有的,具体可以去看操作系统原理中的内存管理策略章节
2、因为应用的不同,应用程序对内存使用上有两种不同角度:要使用时才申请,用完后就立即释放;可以先申请,要使用时就直接用,用完也不释放,完全不用时才释放
前者通常用于商业性质的软件开发,多应用共同使用计算机全局内存,优点很明显,因需要时在占有资源,内存等资源环境为动态的,内存使用效率是最优化…
[/Quote]
呵呵,太抽象了点,或许说的很对
请问这对解决内存碎片有什么帮助嘛!
baizhaoshan 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 60 楼 flowlight 的回复:]
会在WINCE上做应用的通常都是工业级应用,其实WINCE的设计目标就是工业级应用场合
要做到工业级的性能、稳定性、可靠性的话,把握几个基本原则
为应用建立起固态的、稳定的应用环境;所有的输入输出都是不可信任的。。。。

楼主给分吧
[/Quote]
这个说的还是很有道理的
因为WincE也不需要像Windows那样运行N个应用程序,不停的切换
R_hgt 2008-12-17
  • 打赏
  • 举报
回复
mark下,支持
goodmar 2008-12-17
  • 打赏
  • 举报
回复
mark~~
coolpenzi 2008-12-17
  • 打赏
  • 举报
回复
初来乍到,学习下
gyk120 2008-12-16
  • 打赏
  • 举报
回复
好深奥,眩晕中。。。
flowlight 2008-12-16
  • 打赏
  • 举报
回复
会在WINCE上做应用的通常都是工业级应用,其实WINCE的设计目标就是工业级应用场合
要做到工业级的性能、稳定性、可靠性的话,把握几个基本原则
为应用建立起固态的、稳定的应用环境;所有的输入输出都是不可信任的。。。。

楼主给分吧
flowlight 2008-12-16
  • 打赏
  • 举报
回复 1
1、内存碎片问题在现在的各种操作系统都存在,并不是WINCE上独有的,具体可以去看操作系统原理中的内存管理策略章节
2、因为应用的不同,应用程序对内存使用上有两种不同角度:要使用时才申请,用完后就立即释放;可以先申请,要使用时就直接用,用完也不释放,完全不用时才释放
前者通常用于商业性质的软件开发,多应用共同使用计算机全局内存,优点很明显,因需要时在占有资源,内存等资源环境为动态的,内存使用效率是最优化的,缺点也很明显,有时资源不足、碎片和速度等问题。我们windows pc上的常用软件都遵循这个策略,大学的教科书也是这么教我们的。
后者通常用于工业级强度的软件开发,服务器类、工控类、嵌入式类的软件都采用该策略。应用独占计算机的内存等资源,优点很明显,因并不存在频繁的内存申请和释放,不会发生或少发生动态的使用资源,内存等资源环境为固态或说静态,缺点也明显,内存等资源为非最优化使用。例子:服务器内存池也是采取这种策略。
前者以速度、稳定、可靠来换取可用性;后者是以冗余换速度、稳定、可靠。
根据应用场合的特征正确选择资源使用策略是非常重要的。
kwovex 2008-12-16
  • 打赏
  • 举报
回复
学习了
baizhaoshan 2008-12-16
  • 打赏
  • 举报
回复
刷屏也可以选择InvalidateRect(rect,false),这样只重画部分区域,但是这样整个OnPain()函数还是执行了一遍,GDI产生的内存碎片还是避免不了的
baizhaoshan 2008-12-15
  • 打赏
  • 举报
回复
刚开始用内存DC,将图片画好之后再一次显示出来。由于没有释放内存Bitmap,这样内存很快就占完了。后来注意到这点,对话框销毁的时候释放内存Bitmap。但是刷新多了还是会有内存使用增加的现象,好像是每次增加4K空间。这可能就是内存碎片了吧。

也没有找到好的解决办法。关注中。。。。
加载更多回复(54)

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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