本文转自:http://hi.baidu.com/even_xf/blog/item/1452ae2a55852f3f5343c180.html
我们知道,WINCE系统,无论是之前的4.2.net、5.0还是现在的6.0,都是不能支持超过512MB物理内存的,OEMAddressTable, OEMGetExtensionDRAM 和OEMEnumExtensionDRAM这些函数也都是限制在512MB之内使用的。
如果我们非要在CE系统上使用超过512MB的内存,那么我们只能在应用层的应用程序中使用。可以使用VirtualAlloc函数带0地址参数,先要求系统保留一部分的虚拟地址空间,然后用VirtualCopy,带PAGE_PHYSICAL 属性,将超过512MB的物理内存映射到之前申请的虚拟空间中,这样应用程序就可以使用多出512MB的RAM了。
不过,虽然这样做,应用程序可以使用这部分多处的RAM了,但仍然不能解决的问题有:
1.WinCE系统仍然不能使用这部分的RAM,这部分RAM对系统来说是不可见的。
2.这部分RAM在同一时刻只能让一个应用程序使用,其他的应用程序是不能使用的,因为这部分RAM不在WINCE系统的内存管理范围内。
当然,如果项目确实有这方面的大于512MB RAM的需求,那唯一能做的就是用Windows XP Embedded 代替WinCE系统。
同时我们也希望微软的WinCE开发TEAM能出台解决这方面问题的办法,不过考虑到WinCE的应用领域,这种可能性估计是很小的了。
本文深入分析了WinCE系统在内存管理上的局限性,特别是不能支持超过512MB物理内存的问题,并提出了通过应用层的虚拟内存操作来突破这一限制的方法。然而,这种方法仍然存在部分内存对系统不可见以及同一时刻仅允许一个应用使用的局限。文章最后建议对于确实有大内存需求的项目,考虑使用WindowsXPEmbedded作为替代方案。
1133

被折叠的 条评论
为什么被折叠?



