wince支持的最大物理内存是512MB,也就是如果我做一个硬件系统的话,使用SDRAM则最大是512MB,再大就不能用了(一般情况,不考虑通过特殊方法实现),但是wince 又说,低2GB的用户空间被分成64个32MB的slot,1~slot32保留给要加载的每个进程,最多支持32个进程,每个进程占用一个slot,也就是32MB。
这样我运行一个进程就占用32MB的内存吗?要是17个进程就是17*32=544MB 超过了512MB。难道这些线程不在内存中运行!!!?
512MB的内存和虚拟地址的0x80000000~0xC0000000(1024MB) 又是什么关系呢?
ARM寻址空间是4GB吧,用掉512MB,其他的只能用到ROM了 吗????
哎,这些问题,真难解啊!!
进程只是在虚拟地址中啊,运行到了才会替换到内存中吧
你看内存映射表都是映射0x80000000以后的地址,0x80000000以前的应该就是低2GB的用户空间
就像只有一个能放一本书的书桌,和能放N本书的书柜,书桌只有一个,你却能看所有的书。
书桌和书柜 就是物理内存和2GB的用户空间的关系吧
楼主正解。
另外楼主还有疑问的话,就去下载下:
WindowsEmbedded从入门到精通系列课程40 深度探索Windows CE的内存管理机制.wmv ,讲得比较清楚;
下载地址为:
http://www.msdnwebcast.com/webcast/2006.aspx
你的意思是,
比如我在wince中运行了一个word程序。
那么,wince先把word程序复制到ram中,然后,把slot0 指向这个地址运行。
如果我再运行一个贪吃蛇的游戏(word程序没有关闭),wince也会把贪吃蛇的程序复制到ram中,然后再把slot0,指向这个地址空间。
那这样word程序的ram空间和贪吃蛇的ram空间肯定是分开的。
如果我把word程序关闭,那么这块ram空间就可以重复利用,但是我不关闭的话就会占用ram。(这有个问题,占用的ram是32MB还是,小于32MB?)
但是如果在wince下打开17个不同的应用程序,那样不就内存不够了,17个还没有到wince支持的32个呢?
我怎么感觉即使WORD不关闭,贪吃蛇程序也可能占用WORD占用的RAM空间呢
反正暂时也不用,用时再整过来不就行了
纯属个人观点,我也讲不明白,哈哈。。。。
帮顶,应该就是物理空间与虚拟空间的映射的问题,进程运行在虚拟空间上面,同一片物理空间可以与不同的虚拟空间构成映射的。。。
何宗键老师的windows ce 嵌入式系统一书中对wince内存管理说的还算详细,有可能拿来看看
呵呵,这个2G啥的,指的是虚拟内存呢。不是物理内存。