以文件为后背存储区的内存交换文件
各种后备存储器的内存映射文件
- 以
磁盘中文件系统的具体文件
为后备存储的页交换文件(文件映射) - 以
页交换文件("虚拟内存")
为后备存储器的页交换文件(共享内存)
页交换文件(虚拟内存)
通过CreateFileMapping
api 创建文件映射内核对象,在内存中申请空间(物理内存和虚拟内存)
通过MapViewOfFile
在响应的进程虚拟内存空间中预定对应空间,并且把上一步的内存映射到进程虚拟空间中。
这样就实现了共享内存
具体磁盘文件
CreateFileMapping
直接映射文件到进程虚拟空间中
映象类型的内存块和映射类型的内存块
映象类型的文件类型需要exe dll等文件
而映射类型则只要是打开的文件都可以。
操作文件需要用到的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
);