在WINCE中使用超过512M的RAM

来源:互联网 发布:smali 反编译 java 编辑:程序博客网 时间:2024/05/12 14:55

本文转自: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的应用领域,这种可能性估计是很小的了。