第13章 Windows的内存结构
【文起】蟹儿的鼓励和支持,以及有时候的激励,是我能坚持的源泉,爱你宝贝儿。
1、 进程的虚拟地址空间
每个进程都有自己的虚拟地址空间。32位的进程来说,地址空间为4GB()。而这
个只是虚拟地址空间,只是内存地址的一个范围,而不是真正的物理地址空间。
2、 虚拟地址空间如何分区
每个进程的虚拟地址空间都要划分为各个分区。
2.1、NULL指针分配的分区
分配内存时,如果没有足够的内存来满足要求,就会返回一个NULL指针。但是代码可
能并不检查这种可能性,就开始访问)0x00000000地址的内存。这就会发送内存访问的违规现象。
2.2 MS-DOS/16位Windows应用程序兼容分区————仅适用于Windows98
2.3 用户方式分区——————Windows2000和98
这个分区是进程的私有(非共享)地址空间所在的地方。一个进程不可以读取、写入、或者以任何访问驻留在该分区中的另一个进程的数据。
2.4 64KB禁止进入的分区——————仅适用于Windows 2000
位于用户方式分区上面的64kb分区是禁止进入的。保留该分区,是因为这样做使得Microsoft能够更加容易地实现操作系统。
2.5 共享的MMF分区----适用于Windows 98
这个1GB分区是系统用来存放所有32位进程共享数据的地方。系统为每个进程将DLL加载相同的内存地址。
2.6 内核方式分区——————Windows2000和98
这个分区是存放操作系统代码的地方,用于线程调度、内存管理、文件系统支持、网络支持和所有设备驱动程序的代码全部在这个分区加载。这个分区中的一切均可被所有进程共享。
3、 地址空间中的区域
进程被创建并被赋予它的地址空间时,该可用地址空间的主体是空闲的,即未分配的。
如若使用该地址空间的各个部分,必须通过调用VirtualAlloc函数来分配它里面的各个区域,该操作被成为保留。
4、 提交地址空间区域中的物理存储器
若要使用已保留的地址空间区域,必须分配物理存储器,然后将该物理存储器映射到已
保留的地址空间区域,该过程称为提交物理存储器。
5、 数据对齐的重要性
CPU访问正确对其的数据时,运行效率是最高的。X86 CPU的EFLAGS寄存器中包含一
个特殊的位标志,称为AC(对齐检查的英文缩写)标志。默认设置,CPU首次加电时,该标志被设置为0.如果为0,CPU能够自动执行它应该执行的操作,以便成功地访问未对齐的数据值;如果为1,每当系统试图访问未对齐的数据时,CPU就会发出一个INT 17H中断。