转载自:http://hi.baidu.com/even_xf/blog/item/cb7841b4b352a6758bd4b2ae.html
首先看看这张图,从Windows CE Base Team Blog上抓过来的,左边是CE5的虚拟内存布局,右边是CE6的.
上图暂且按下不表,我们先翻出CE5文档里的大图来看( CE5和CE6文档里讲MEM ARCH的地方, Windows CE Features -> Core OS Services -> Core OS Design Development -> Kernel Overview -> Memory Architecture, 藏这么深, 害我找半天 )
上图是CE5的内存布局细节图,User Space里面的Slot 1, Slot 33-63还都被群雄割据, 所以咱们每个进程只能有32M(0x0200 0000)的虚拟地址空间, 一共32个slot可以容纳32个进程. 当然如果32M用光的话,据文档说可以用memory-mapped file或者VirtualAlloc来扩展,不过这两种做法我自己都没有试验过. 偶比较艰苦朴素,内存花销没那么大. 有多艰苦? BOOL类型都舍不得用啊,多凑几个BOOL,搞位段去一块儿用一个字节吧, 穷啊,买不起RAM啊~ 哈哈,夸张了。
CE6里面看起来就爽很多了.(疯掉,CE6这个地方不是给图,而是给表格, 我敲了好久)
Mode | Range | Size | Descroption |
KERNEL | 0xF000 0000 ~ 0xFFFF FFFF | 256MB | CPU specific VM |
0xE000 0000 ~ 0xEFFF FFFF | 256MB | Kernel VM, CPU dependent | |
0xD000 0000 ~ 0xDFFF FFFF | 256MB | Kernel VM | |
0xC800 0000 ~ 0xCFFF FFFF | 128MB | Object store | |
0xC000 0000 ~ 0xC7FF FFFF | 128MB | Kernel XIP DLLs | |
0xA000 0000 ~ 0xBFFF FFFF | 512MB | Statically mapped, uncached | |
0x8000 0000 ~ 0x9FFF FFFF | 512MB | Statically mapped, cached |
|
USER | 0x7FF0 0000 ~ 0x7FFF FFFF | 1MB | unmapped for protection |
0x7000 0000 ~ 0x7FEF FFFF | 255MB | shared system heap | |
0x6000 0000 ~ 0x6FFF FFFF | 256MB | RAM backed map files | |
0x4000 0000 ~ 0x5FFF FFFF | 512MB | User mode DLLs, Code and data | |
0x0001 0000 ~ 0x3FFF FFFF | 1GB | Process, User allocatable VM | |
0x0000 0000 ~ 0x0000 1000 | 64KB | CPU dependent user kernel data |