进程的线性地址空间分成两部分:
- 从0x00000000到0xbfffffff的线性地址,无论进程运行在用户态还是内核态都可以寻址。
- 从0xc0000000到0xfffffff的线性地址,只有内核态的进程才能寻址。
当进程运行在用户态时,它产生的线性地址小于0xc0000000;当进程运行在内核态时,它执行内核代码,所产生的地址大于等于0xc0000000。但是,在某些情况下,内核为了检索或存放数据必须访问用户态线性地址空间。
Windows也是分为用户空间和系统空间。用户空间分配给不同的进程,系统空间分配给各种驱动。msdn上说32位windows的用户空间最大是0x7ffeffff,系统空间则是0x8000000~0xfffffff。
当然,肯定有人会想0x7fff0000~0x7fffffff这64KB的空间去哪了。关于0x7fff0000~0x7fffffff更详细的内容可参考本站文章:Windows冷知识:0x7ffeffff~0x7fffffff