从汇编到C++

以文件为后背存储区的内存交换文件

2018-05-04  本文已影响0人  Asura_Luo

以文件为后背存储区的内存交换文件

各种后备存储器的内存映射文件

页交换文件("虚拟内存")

通过CreateFileMapping api 创建文件映射内核对象,在内存中申请空间(物理内存和虚拟内存)
通过MapViewOfFile 在响应的进程虚拟内存空间中预定对应空间,并且把上一步的内存映射到进程虚拟空间中。
这样就实现了共享内存

image

具体磁盘文件

CreateFileMapping 直接映射文件到进程虚拟空间中

image

映象类型的内存块和映射类型的内存块

映象类型的文件类型需要exe dll等文件
而映射类型则只要是打开的文件都可以。

image

操作文件需要用到的api

//创建或打开指定文件的文件映射对象

HANDLE CreateFile
(
  LPCTSTR lpFileName,        // 文件路径
  DWORD dwDesiredAccess,  // 访问权限
  DWORD dwShareMode,        // 共享模式
  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD
  DWORD dwCreationDisposition,     // 创建/打开方式
  DWORD dwFlagsAndAttributes,      // 文件属性
  HANDLE hTemplateFile            // 模板相关
);

//创建或打开指定文件的文件映射对象
HANDLE CreateFileMapping
(
    HANDLE hFile,                           // 要映射的文件句柄    LPSECURITY_ATTRIBUTES lpAttributes, // 安全属性
    DWORD flProtect,                      // 保护属性
    DWORD dwMaximumSizeHigh, // 映射区域最大大小高32位 
    DWORD dwMaximumSizeLow,  // 映射区域最大大小低32位     LPCTSTR lpName                      // 映射对象的名字
);

//创建映射
LPVOID MapViewOfFile
(
  HANDLE hFileMappingObject,// 文件映射对象句柄
  DWORD dwDesiredAccess,    // 访问的保护属性  DWORD dwFileOffsetHigh,      // 映射的内容在文件中的偏移
  DWORD dwFileOffsetLow,      // 映射的内容在文件中的偏移  类似于 offset
  SIZE_T dwNumberOfBytesToMap  // 映射的文件内容大小  类似于 limit

);
上一篇 下一篇

猜你喜欢

热点阅读