Win32内存结构(转)

转载地址:Win32内存结构

(1)在Win32中每一个进程的虚拟地址空间大小是4GB。32位的指针能从0x00000000到0xFFFFFFFF。这使得指针有4GB种值,既覆盖了4GB的空间。请注意该4GB的地址空间是私人地址空间,它只属于某个进程。当进程中的线程在运行时,它只能使用属于本进程的内存。也就是说,对于一个线程来说,别的进程的内存是不可访问的。这样也就是说,进程A可以有一个数据保存在地址为0x21889023处,另一个进程B也可以将其数据保存在地址为0x21889023处,因为进程A和进程B的地址空间是属于它们自己的,私有的。

[@more@]

(2)Windows95进程地址划分:

 

0x00000000至0x00000FFF:4096字节MS-DOS和16位Windows(不可访问,是为NULL指针分配的地址空间)

 

0x00001000至0x003FFFFF:4190208字节,MS-DOS和16位Windows(可读写但不要动)

 

0x00400000至0x7FFFFFFF:2143289344字节,属于Win32进程私有

 

0x80000000至0xBFFFFFFF:1GB空间,用于内存映射文件,共享Win32 的DLL,16位应用程序和内存分配。由所有Win32进程共享(可以使用,可以读写)

 

0xC0000000至0xFFFFFFFF:1GB空间,用于VxD,内存管理器和文件系统码;由所有Win32 进程共享(可读写,但不要使用)

 

(3)Windows NT 里程地址划分:

 

0x00000000至0x0000FFFF:64K 字节,用于NULL指针分配。(不可访问)

 

0x00010000至0x7FFEFFFF:2147352576字节,属于Win32进程私有。

 

0x7FFF0000至0x7FFFFFFF:64K字节,用于循环指针分配。(不可以访问)

 

0x80000000至0xFFFFFFFF:2G字节,用于操作系统(不可访问)

 

(4)要使用地址空间里的内存需要这几步:

 

1.分配保留区。(使用VirtualAlloc函数来分配,得用该函数分配的一块区域被称为保留,使用VirtualFree函数释放一块地址空间的区域)

 

2.提交物理内存。(要使用地址空间中的一块保留区域就要分配物理内存,然后将这块物理内存映射到保留区,这样的操作叫提交物理内存。物理内存的分配使用VirtualAlloc函数,释放使用VirtualFree函数)

 

(5)物理内存:在Win32上最好把物理内存看成是“保存在硬盘上的页面文件”。为什么这么说呢?这是因为系统中的页面文件大小是决定应用程序能够使用物理内存的多少的最重要的因素,而拥有的RAM大小只占有很小的影响。那么什么是页面文件呢?

 

页面文件:

一、 作用:简单的说,它是用来支援RAM的,它就象一个临时仓库,它是虚拟内存管理中的重要“部件”。它将一部分硬盘空间设置为虚拟内存,从而扩大了计算机的可用“内存”空间来满足程序的运行要求。“磁盘碎片整理程序”中的“分析”功能来查看页面文件在硬盘上的相应位置现,其中显示的“绿色”区域(系统文件)就是页面文件所在位置。

二、 对于Windows2000页面文件是安装逻辑盘根目录下的Pagefile.sys文件。

三、 页面文件也可叫做“交换文件”。不同时期不同叫法。从Windows 3.X到 Windows 9X,虚拟内存技术的运用日渐成熟,在使用中通常是利用Windows安装目录中的Win386.swp这个交换文件来实现虚拟内存的创建。

 

RAM (Random-Access Memory)-随机存取存储器,一种存储单元结构,用于保存CPU处理的 数据信息。"随机"(Random)存取是与"顺序(serial)"存取相对而言的,意思是CPU可以从RAM中任意地址中直接读取所需的数据,而不必从头至尾一一查找。

 

(5)Windows NT下应用程序地址空间映射中的“类型”,该类型包括四种:

空闲(Idle):这一区域还没有被保留,应用程序可以在空闲区域中的任一部分保留一块区域。

私有(Private):包含系统中页面文件中的物理存储。

映象(Image):包含存在于内存映射的Exe或DLL文件中的物理存储。

映射(Mapped):包含存在于内在映射的数据文件中的物理存储。

你可能感兴趣的:(VC++)