地址范围 | 用途 |
0x0000 0000到0x41FF FFFF | 由所有应用程序使用。共33个槽,每个槽占32MB。槽0(Slot 0)由当前占有CPU的进程使用。槽1由XIP DLL使用。其它槽用于进程使用,每个进程占用一个槽。 |
0x4200 0000到0x7FFF FFFF | 由所有应用程序共享的区域。32MB地址空间有时不能够满足一些进程的需求。那么进程可以使用这个范围的地址空间。在这个区域里应用程序可以建堆、创建内存映射文件、分配大的地址空间等。 |
0xA000 0000到0xBFFF FFFF | 在这个范围内核重复定义0x8000 0000到0x9FFF FFFF之间定义的物理地址映射空间。区别是在这范围映射的虚拟地址空间不能够用于缓冲。 我举例来说明:假设一个产品有64MB物理内存。如上文所述定义好OEMAddressTable后。内核启动后一个物理地址映射空间范围在0x8000 0000到0x8400 0000,那么内核会从0xA000 0000到0xA400 0000定义一个同样范围的地址空间,这个地址空间和0x8000 0000到0x8400 0000映射到相同的物理地址。但这个虚拟地址空间不能够用于缓冲。 |
0xC000 0000到0xC1FF FFFF | 系统保留空间 |
0xC200 0000到0xC3FF FFFF | 内核程序nk.exe使用的地址空间。 |
0xC400 0000到0xDFFF FFFF | 这个范围为用户定义的静态虚拟地址空间,但这个地址空间只能用于非缓冲使用。 利用OEMAddressTable定义物理地址映射空间后,每次内核启动时这个范围都不改变了,除非产品包含的物理内存容量发生变化。假如增加到128MB物理内存,那么物理地址映射空间也向后扩大了一倍。Windows CE.NET也允许用户创建静态的物理地址映射空间。用户可以调用CreateStaticMapping函数或者NKCreateStaticMapping函数来映射某一段物理地址到0xC400 0000和0xE000 0000之间的某一个范围。需要注意的是用这个函数创建的静态虚拟地址只能够由内核访问,而且不能用于缓冲。 |
0xE000 0000到0xFFFF FFFF | 内核使用的虚拟地址。当内核需要大的虚拟地址空间时,会在这个范围内分配。 |
![]() |
图1 Windows CE.NET内存结构 |
![]() |
图2 进程地址空间结构 |
欢迎光临 DIY编程器网 (http://diybcq.com/) | Powered by Discuz! X3.2 |