wince程序内存和存储内存

上传人:第*** 文档编号:32819389 上传时间:2018-02-12 格式:DOC 页数:5 大小:25.50KB
返回 下载 相关 举报
wince程序内存和存储内存_第1页
第1页 / 共5页
wince程序内存和存储内存_第2页
第2页 / 共5页
wince程序内存和存储内存_第3页
第3页 / 共5页
wince程序内存和存储内存_第4页
第4页 / 共5页
wince程序内存和存储内存_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《wince程序内存和存储内存》由会员分享,可在线阅读,更多相关《wince程序内存和存储内存(5页珍藏版)》请在金锄头文库上搜索。

1、1Wince 程序内存和存储内存Wince 下的内存实际上是分为三个部分的. 先说这几部分的名字,对象存储, 系统内存,程序内存. 准确来讲,应该用下面公式说明Wince 内存 = 系统内存 + (对象存储 + 程序内存).这里德内存也就是我们平时说的 SDRAM,而我们的平台用的 64M 的 SDRAM。在 wince 系统的控制面板系统中可以看到系统内存在 30M 左右,但是硬件上 SDRAM 明明是 64M,为什么这里只有 30M 呢?因为 wince系统本身运行要占用 30M 左右内存。这里可以把这部分内存称为系统内存。其实 wince 正常给我们用的内存只有 30M 左右,前提是你用

2、的 SDRAM 是 64M。下面我们就仔细分析下剩下的这 30M。也就是程序内存和储存内存(对象储存)。程序内存不用解释,就是可供我们的程序用的内存。对象存储是 wince 里一个新的概念. 嵌入式 wince 操作系统一般是用在消费电子上面, 比如 pocket pc, 手机, PDA 等移动设备上. 这一类的设备一般都是有两个电源的, 一个是主电源(比如你的手机电池), 一个是后备电池(拆开手机,电路板上可以找到那个小电池). 后备电池的作用就是在主电源没电的情况下,维持操作系统的一些需要保存的数据, 比如注册表, 数据库等. 而这些要保存的数据就是放在对象存储里的,可以复制一个文件到 w

3、ince 下(SD 卡,U 盘2除外),会发现对象存储占用空间变大,到这里,你应该理解对象存储了。现在整个 wince 内存分配有个清楚的概念了,但是我们在平时运用时经常会遇到应用程序开辟一段内存导致应用程序挂了的现象。这里不管你是动态申请的还是干吗。如果内存分配中程序内存过小。这里前提是你的应用程序很大很复杂,这种现象肯定会有的。那么怎么才能申请到大的内存空间呢?当然你可以在控制面板中滑动那个分配程序内存和储存内存大小的滑动条,但是这种情况在系统冷启动后有恢复成系统默认的了。就是他们两对半开。那么是不是我们不能修改这个值了呢?没关系。既然微软让你看到这个玩意肯定有地方改的。上网 google

4、 下很多办法。这里我介绍两种:1.在 config.bib 中有个 CONFIG 这里的详细内容可以参考何宗建老师的书。在 CONFIG 字段下面加入 FSRAMPERCENT=0x20202020 。这里为什么是 0x20202020。可以参考网上牛人的公式。FSRAMPERCENT 是一个 4byte 长度的十六进制数, 我们用代数假设 FSRAMPERCENT = 0xQXYZ, 其中 Q,X,Y,Z 都是十六进制数那么最终划分给 Storage Memory 的大小 = ( Q + X + Y + Z ) / 0x400 * TOTAL_RAM_SIZE 以我平台例子可以发现 Stor

5、age Memory = (0x20+0x20+0x20+0x20)/0x400*64 = 3800KB.32.网上也有人说动态分配不过这个办法我没有试验过不知道是不是成功的。其实我个人觉得如果动态分配很稳定的话肯定是动态的好了,这样可以根据不同的应用来分配不同的程序内存大小。typedef DWORD (*SETSYSTEMMEMORYDIVISION)(DWORD);typedef BOOL (*GETSYSTEMMEMORYDIVISION)(LPDWORD,LPDWORD,LPDWORD);void SetObjectMemorySpace(int nSize)#ifdef _WIN3

6、2_WCE/从动态库中获取函数地址以设置对象存储区的大小.HINSTANCE hDll = LoadLibrary(_T(Coredll.dll);SETSYSTEMMEMORYDIVISION SetSystemMemoryDivisionProc = NULL; GETSYSTEMMEMORYDIVISION GetSystemMemoryDivisionProc = NULL; if( NULL != hDll )/获取导出函数地址SetSystemMemoryDivisionProc = (SETSYSTEMMEMORYDIVISION)GetProcAddress(hDll,_T(S

7、etSystemM4emoryDivision);GetSystemMemoryDivisionProc = (GETSYSTEMMEMORYDIVISION)GetProcAddress(hDll,_T(GetSystemMemoryDivision);if(SetSystemMemoryDivisionProc & GetSystemMemoryDivisionProc)DWORD dwStorePages = 0;DWORD dwRamPages = 0; DWORD dwPageSize = 0; BOOL bRet = (*GetSystemMemoryDivisionProc)(&dwStorePages,&dwRamPages,&dwPageSize);if(bRet)int nPageCount = nSize/dwPageSize;if(nSize%dwPageSize != 0)nPageCount+;(*SetSystemMemoryDivisionProc)(nPageCount);5SetSystemMemoryDivisionProc = NULL;GetSystemMemoryDivisionProc = NULL;FreeLibrary(hDll);hDll = NULL; #endif

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号