创建和打开内存映射

class MemoryShare
{
public:static HANDLE CreateMemoryMap(std::string id, size_t shared_mem, void* &map_buf){return MemoryShare::CreateMemoryMap(id, shared_mem, "", map_buf);}static HANDLE CreateMemoryMap(std::string id, size_t shared_mem, std::string file, void* &map_buf){HANDLE hFile = NULL;HANDLE hMap = NULL;if (!file.empty())hFile = CreateFileA(file.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile){hMap = CreateFileMappingA(hFile, NULL, PAGE_READWRITE, 0, shared_mem, id.c_str());}else{hMap = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, shared_mem, id.c_str());}if (hMap == NULL){if (hFile)CloseHandle(hFile);return false;}map_buf = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);if (!map_buf){if (hFile)CloseHandle(hFile);CloseHandle(hMap);hMap = NULL;return false;}if (hFile)CloseHandle(hFile);return hMap;}static bool OpenMemoryMap(std::string id, size_t map_size,void* &map_buf){HANDLE hMap = OpenFileMappingA(FILE_MAP_ALL_ACCESS, 0, id.c_str());if (!hMap){return false;}map_buf = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, map_size);if (!map_buf){CloseHandle(hMap);return false;}CloseHandle(hMap);return true;}static void CloseMemoryMap(void* base_map){if (base_map)UnmapViewOfFile(base_map);}};

Example

void* pto = NULL;
HANDLE hMem = MemoryShare::CreateMemoryMap("yoohoo", 3000, "G:/a.txt", pto);
if (hMem)
{memcpy(pto, "123456789", 10);
}void* pmap = NULL;if (MemoryShare::OpenMemoryMap("yoohoo", 256, pmap))
{cout << (char*)pmap;
}getchar();
if (hMem)CloseHandle(hMem);
MemoryShare::CloseMemoryMap(pmap);

转载于:https://my.oschina.net/pirtt/blog/908380

Windows 内存映射相关推荐

  1. windows 内存映射文件

    4.内存管理机制--内存映射文件 (Map)    和虚拟内存一样,内存映射文件可以用来保留一个进程地址区域:但是,与虚拟内存不同,它提交的不是物理内存或是虚拟页文件,而是硬盘上的文件. ·使用场合 ...

  2. Windows内存映射步骤

    内存映射的过程: (1)调用CreateFile打开或者创建一个分区上实际存在的文件: (2)建立文件的内存映射,获取文件句柄hFileMap该句柄是访问内存映像所必须的,使用CreateFilema ...

  3. windows内存映射文件【学习笔记】

    第一步:先创建一个文件,获得文件句柄 第二步 创建文件映射对象 第三步 映射到虚拟内存 lpAddr 就是当前虚拟内存的地址 第四步 使用虚拟内存地址,进行读写操作 写入文件不是即时的,在关闭资源的时 ...

  4. Windows内存映射文件打造极速复制(速度已和ExtremeCopy商业软件相当)

    如题,先贴图,后续上传源码和exe 测试文件大小7.08GB: 结果: 商业软件ExtremeCopy 2.1测试结果: 最新代码: /* * Copyright (c) purelib 2012-2 ...

  5. windows笔记-内存映射文件

    Windows提供了3种进行内存管理的方法: • 虚拟内存,最适合用来管理大型对象或结构数组. • 内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行的多个进程之间共享数据. ...

  6. java 内存映射文件进程间通讯_[转]Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile...

    进程间的通信方式有很多种, 上次我们说了最傻瓜的"共享外存/文件"的方法. 那么, 在本文中, 我们即将学习"共享内存"的方式实现进程间的通信, 这是IPC最快 ...

  7. Windows核心编程 第十七章 -内存映射文件(下)

    17.3 使用内存映射文件 若要使用内存映射文件,必须执行下列操作步骤: 1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件. 2) 创建一个文件映射内核对象,告诉系统该 ...

  8. Windows核心编程 第十七章 -内存映射文件(上)

    第1 7章 内存映射文件 对文件进行操作几乎是所有应用程序都必须进行的,并且这常常是人们争论的一个问题.应用程序究竟是应该打开文件,读取文件并关闭文件,还是打开文件,然后使用一种缓冲算法,从文件的各个 ...

  9. 《windows核心编程》 17章 内存映射文件

    内存映射文件主要用于以下三种情况: 系统使用内存映射文件载入并运行exe和dll,这大量节省了页交换文件的空间以及应用程序的启动时间 开发人员可以使用内存映射文件来访问磁盘上的数据文件.这使得我们可以 ...

  10. 内存映射文件——Windows核心编程学习手札之十七

    内存映射文件 --Windows核心编程学习手札之十七 与虚拟内存一样,内存映射文件保留地址空间,并将物理存储器提交给该区域,差别在于所提交的物理存储器是磁盘上有文件存在的空间,而非系统的页文件,一旦 ...

最新文章

  1. 一文详解实时稀疏点云分割
  2. python读取excel-Python读取Excel表格
  3. URAL 7077 Little Zu Chongzhi's Triangles(14广州I)
  4. pxe+kickstart无人值守安装
  5. Java序列化(Serialization)的理解
  6. 视觉智能开放平台通过函数计算实现多人口罩佩戴识别
  7. redis数据持久化到mysql_Redis【数据持久化篇】
  8. centos压缩和解压缩
  9. 算法—巧排扑克牌(C语言)
  10. Java笔记-concurrent集合及线程池
  11. 腾讯 2016 春季实习校招 HR 面回忆(C++后台)
  12. VC操作Excel2003,Word2003的两种方式
  13. 数据结构笔记(一)-- 概念
  14. eclipse C/C++开发环境配置全过程
  15. R语言可视化学习笔记之ggrepel包
  16. Angular.js 简单实现数字变汉字
  17. 第一次冲刺-个人总结05
  18. apk一键脱壳工具_海量破解、修改、无广告软件一键获取!一个工具就能轻松搞定!...
  19. java面向对象数组实现家庭收支记账软件_C项目-家庭收支记账软件
  20. localhost:8080打不开本地网页

热门文章

  1. Java 第一阶段建立编程思想 【面向对象编程(中级部分)】
  2. Solr分组聚合查询之Facet
  3. Android Debug Bridge(安卓调试桥) tools
  4. (转)一些jbx的配置
  5. 计算机一级系统压缩密码,压缩文件加密,教您给winRAR压缩的文件设置密码
  6. PDF转换成Word转换器在线转换效果如何
  7. 2017年自动修复概述——Automatic Software Repair: A Survey [来自软件工程顶刊 TSE 2017]
  8. mysql中ddl和ddm_DDL与DML问题
  9. oracle基础|什么是数据库操作语言|什么是DDL、DML、DCL
  10. 怎么用微信打开链接才不会提示已停止访问网页