基本概念【摘录】 每个进程都被赋予它自己的虚拟地址空间
对于 32 位进程来说,这个地址空间是 4GB,因为 32 位指针可以拥有从 0x000000000 至 0xFFFFFFFF 之间的任何一个值
这使得一个指针能够拥有4 294 967 296个值中的一个值,它覆盖了一个进程的4GB 虚拟空间的范围
这是相当大的一个范围
由于每个进程可以接收它自己的私有的地址空间,因此当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存
属于所有其他进程的内存则隐藏着,并且不能被正在运行的线程访问
注意在 Windows 2000 中,属于操作系统本身的内存也是隐藏的,正在运行的线程无法访问
这意味着线程常常不能访问操作系统的数据
Windows 98 中,属于操作系统的内存是不隐藏的,正在运行的线程可以访问
因此,正在运行的线程常常可以访问操作系统的数据,也可以破坏操作系统(从而有可能导致操作系统崩溃)
在 Windows 98 中,一个进程的线程不可能访问属于另一个进程的内存
前面说过,每个进程有它自己的私有地址空间
进程A 可能有一个存放在它的地址空间中的数据结构,地址是 0x12345678,而进程B 则有一个完全不同的数据结构存放在它的地址空间中,地址是 0x12345678
当进程A 中运行的线程访问地址为 0x12345678 的内存时,这些线程访问的是进程A 的数据结构
当进程B 中运行的线程访问地址为 0x12345678 的内存时,这些线程访问的是进程B 的数据结构
进程A 中运行的线程不能访问进程B 的地址空间中的数据结构
记住,这是个虚拟地址空间,不是物理地址空间
该地址空间只是内存地址的一个范围
在你能够成功地访问数据而不会出现违规访问之前,必须赋予物理存储器,或者将物理存储器映射到各个部分的地址空间
每个进程的虚拟地址空间都要