摘要:
象使用虚拟内存一样,使用内存映像文件同样需要经过保留和提交两个过程,首先在进程内存空间保留一块区域,然后提交物理存储给这段区域。不同的是物理存储来自于磁盘上的文件,而不是系统的分页文件。也即将磁盘上指定的数据文件作为虚拟内存,这个实现过程被称为文件映像,可以将文件全部或部分映像到进程的地址空间中。文件映像过以后,可以把文件映像的部分当作已全部被载入内存一样的去访问它,这时又称它为内存映像文件。内存映像文件使用步骤要使用内存映像文件,可以按以下步骤:(1) 调用Windows API 函数CreateFile()创建或是打开一个文件,得到一个标识该文件(内核对象)的句柄,它确定了哪一个磁盘文件将 阅读全文
摘要:
在虚拟内存模型下,理论上有2GB的内存供程序使用。当VIRTUALALLOC或者其他函数提交虚拟内存时,虚拟内存管理器就开始消耗RAM。当物理内存将被消耗完时,管理器就开始将内存页面映射到硬盘。在默认的设置下,操作系统会用硬盘的所有可用空间来作为磁盘交换文件。因此,内存的限制并不是2GB的理论限制,而是RAM加上硬盘可用交换文件空间。2GB的虚拟内存空间对于进程是私有的。硬盘交换文件对于操作系统和所有正在执行的任务而言是共享资源。 阅读全文
摘要:
自由FREE:内存页既没有提交也没有被保留。它不能被进程访问,但是可以供某个内存分配函数分配。 保留RESERVED:内存已经被调用进程保留,不能被其他进程或者线程使用。但是内存并没有被使用,也没有提交到物理存储器。 提交COMMITTED:内存已经被提交到物理存储器。内存标识为正在被使用。只有分配它的进程才可以使用该内存。 阅读全文
摘要:
有4种用于内存分配的API函数。虚拟VIRTUAL函数用于分配和管理大数量的内存,堆函数HEAP用于小数量内存,全局函数GLOBAL及局部函数LOCAL用于小数量内存分配,这两类函数是为了实现与16位系统兼容而提供的。WIN32 API仍然维护全局以及局部的堆函数,但是它们都是从局部的2GB中分配内存。这些堆对于进程而言都是局部的,不能被其他进程访问。 当一个程序需要分配一个至少几KB缓存时,使用VIRTUALALLOC函数获得内存块。它以4KB为单位获取内存,分配的内存以4KB来对齐。当程序需要为小对象,数组或者结构分配内存时,调用HEAPALLOC函数更合适。将VIRTUALALLOC函数 阅读全文
摘要:
虚拟内存操作系统为程序员提供了超过物理内存限制的浮动内存模型。当系统需要的内存超过了物理内存时,可以使用硬盘中的交换文件在内存和硬盘之间进行页交换操作。不管目标机器安装了多少物理内存,都会有2GB的虚拟内存供开发人员使用,操作系统会自动实现内存到硬盘的映射。 每一个进程都有自己的4GB虚拟内存。低地址的2GB由开发人员支配。高地址的2GB只供操作系统使用。内存管理API函数只是从低地址的2GB分配所需的内存。 阅读全文