《Windows核心编程》读书心得——内存(内存映射文件)(5)
来源:互联网 发布:程序员项目总结怎么写 编辑:程序博客网 时间:2024/04/30 02:52
内存映射文件:前面提到,硬盘上的物理存储器大部分是以页交换页面的形式存在。除此之外,其实硬盘上的内存还可以通过内存映射文件的方式来分配。
它的物理存储器来自磁盘上已有的文件,而不是系统的页交换文件。
优点:
(1)直接使用磁盘上的文件本身作为物理存储器(例如:exe、dll),而不用页交换文件,能够有效节省空间;
(2)节省了应用程序启动的时间;
(3)同一应用程序的多个实例可以共享内存中的代码和数据(当一个程序已经运行,那么再打开一个程序的实例,只不过是创建一个新的内存映射视图,不会分配新的空间);
疑问:既然是共享内存,那么怎么保证每个程序实例的数据和代码的独立性?
系统是通过“写时复制”的方法来保证这种独立性的。不同的视图映射到相同的内存地址,但是,当程序视图对内存映射文件执行“写入”操作时,系统会为需要写入的页面分配新的页面,然后将原来的页面数据拷贝到新页面,这样就能够保证程序在新的页面上修改数据,而不影响到其它视图对应页面中的内容。
内存映射文件的使用步骤:
(1)创建或打开一个文件内核对象,该对象标识了我们想要用作内存映射文件的那个磁盘文件;
CreateFile()函数。
最好传0给dwShareMode参数,告诉系统想要独占对文件的访问。
(2)创建一个内存映射内核对象,告诉系统文件的大小及如何访问文件;
CreateFileMapping()函数。
(3)告诉系统把文件映射对象的部分或全部映射到进程的地址空间中。
文件被映射到进程地址空间中的部分,被称为视图。
系统保证同一个内存映射对象的多个视图是一致的,但不保证不同内存映射对象的视图是一致的。
MapViewOfFile()函数(需要告诉系统,把数据文件的哪个字节映射到视图的第一个字节,以及把数据文件的多少个字节映射到地址空间中去)。
内存映射文件的清理过程:
(1)告诉系统从进程地址空间中取消对文件映射内核对象的映射;
UnmapViewOfFile()函数。
如果需要确保所作的修改被写回磁盘中,可调用FlushViewOfFile()函数。
(2)关闭文件映射内核对象;
CloseHandle()函数。
(3)关闭文件内核对象。
CloseHandle()函数。
- 《Windows核心编程》读书心得——内存(内存映射文件)(5)
- 《Windows核心编程》读书心得——内存(内存体系结构)(5)
- 《Windows核心编程》读书心得——内存(堆和栈)(5)
- Windows核心编程(十六)内存映射文件
- Windows核心编程 第十七章 -内存映射文件(上)
- Windows核心编程 第十七章 -内存映射文件(下)
- Windows核心编程笔记(十六)内存映射文件
- 《Windows核心编程》读书心得——进程(3)
- 《Windows核心编程》读书心得——DLL(6)
- window 核心编程 (内存映射文件)
- Windows核心编程:内存映射文件
- 《Windows核心编程》---内存映射文件基础
- Windows核心编程:内存映射文件
- windows核心编程-内存映射文件(一)
- windows核心编程-内存映射文件(二)
- Windows 核心编程 17 内存映射文件
- 《Windows核心编程》之“内存映射文件”
- windows核心编程---内存映射文件
- 如何成为软件架构师
- 正确的方法去拦截OnNewWindow2实现在同一个窗口显示_target的网页
- magento 1.6 无法上传图片
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- Latex细节
- 《Windows核心编程》读书心得——内存(内存映射文件)(5)
- 架构设计原则--类层次多少为宜?
- Activity中无法启动service
- JDBC基本操作
- poj之3671 字符串排序
- 64位WIN7下OpenCV & GSL的配置
- 电子大赛日志(一)
- 同步、异步、阻塞和非阻塞的概念
- 数据库的事务JDBC