内存映射文件

Windows提供了3种进行内存管理的方法

• 虚拟内存,最适合用来管理大型对象结构数组 

• 内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行的多个进程之间共享数据 

内存堆栈,最适合用来管理大量的小对象

 

内存映射文件

内存映射文件与数据视图的相关性

页文件支持的内存映射文件

使用内存映射文件在进程之间共享数据

 

内存映射文件可以用于3个不同的目的

系统使用内存映射文件,以便加载和执行. exeDLL文件。这可以大大节省页文件空间和应用程序启动运行所需的时间。

可以使用内存映射文件来访问磁盘上的数据文件。这使你可以不必对文件执行I/O操作,并且可以不必对文件内容进行缓存。

可以使用内存映射文件,使同一台计算机上运行的多个进程能够相互之间共享数据Windows确实提供了其他一些方法,以便在进程之间进行数据通信,但是这些方法都是使用内存映射文件来实现的,这使得内存映射文件成为单个计算机上的多个进程互相进行通信的最有效的方法。

使用内存映射数据文件 

若要使用内存映射文件,必须执行下列操作步骤:

1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件。

2) 创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件。

3) 让系统将文件映射对象的全部或一部分映射到你的进程地址空间中。

当完成对内存映射文件的使用时,必须执行下面这些步骤将它清除:

1) 告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像。

2) 关闭文件映射内核对象。

3) 关闭文件内核对象。

 

下面将详细介绍这些操作步骤。

步骤1:创建或打开文件内核对象

HANDLE CreateFile(

   PCSTR pszFileName,

   DWORD dwDesiredAccess,

   DWORD dwShareMode,

   PSECURITY_ATTRIBUTES psa,

   DWORD dwCreationDisposition,

   DWORD dwFlagsAndAttributes,

   HANDLE hTemplateFile);

dwDesiredAccess的值

 

含义 

0

不能读取或写入文件的内容。当只想获得文件的属性时,请设定0

GENERIC_READ

可以从文件中读取数据 

GENERIC_WRITE

可以将数据写入文件 

GENERIC_READ |GENERIC_WRITE

可以从文件中读取数据,也可以将数据写入文件 

dwShareMode 的值

 

含义

0

打开文件的任何尝试均将失败

FILE_SHARE_READ

使用GENERIC_WRITE打开文件的其他尝试将会失败

FILE_SHARE_WRITE

使用GENERIC_READ打开文件的其他尝试将会失败

FILE_SHARE_READ FILE_SHARE_WRITE|

打开文件的其他尝试将会取得成功

 

你可能感兴趣的:(职场,休闲,内存映射文件)