wince 内存释放_WinCE5.0 内存管理以及优化方案

本文探讨了Windows CE 5.0系统中内存管理的问题,指出每个进程可用内存可能低于32MB,并且DLL加载可能导致内存紧张。提出了按体积加载DLL、限制线程堆栈大小和使用文件映射等优化方案,以应对内存碎片和分配效率下降的问题。强调长期运行软件速度减慢可能由内存碎片引起,并建议一次性分配内存并用静态变量保存,以减少频繁分配。
摘要由CSDN通过智能技术生成

1 查询当前可用的内存

MEMORYSTATUS m;

m.dwLength = sizeof(m);

::GlobalMemoryStatus(&m);

m.dwAvailVirtual记录了当前进程可用的内存,单位是字节!!

2 DLL占用内存

WinCE5.0系统上说明每一个进程可以占用32MB的内存,实际上可能更少,或许只有25MB的内存空间,目前实测如此。但是对于大型的程序,DLL可能本身的文件体积都有10MB多,这种情况下,如果系统提供了25MB的内存,剔除10MB的DLL占用空间,用户还剩下的空间就只有15MB。

3 优化方案

1)DLL按照体积从小到大进行加载

DLL加载有一个64KB边界问题

2)优化编译体积

意义不大

3)指定线程的堆栈大小

::CreateThread((LPSECURITY_ATTRIBUTES)NULL, 20*1024,

(LPTHREAD_START_ROUTINE)WatchCommPort,

(LPVOID)this,

STACK_SIZE_PARAM_IS_A_RESERVATION, &threadID)

默认情况下会分配1MB的内存给线程堆栈,现在默认给定20KB,同时指定函数的倒数第二个参数为该

STACK_SIZE_PARAM_IS_A_RESERVATION宏定义。

4)使用文件映射的方式

只适用于malloc,对于new,只能够重构代码

注意事项

软件运行的时间越长,运行的速度就越慢,慢的原因有内存分配的效率越来越低,程序的内存区域存在大量的碎片,需要进行长时间的遍历才能够分配到一块合适的内存区域在需要频繁进行内存分配的地方,只是分配内存一次,然后通过静态变量的方法保存分配的内存指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值