内存映射

原创 2018年04月17日 11:08:37

  创建内存映射分三步:CreateFile打开文件,CreateFileMapping创建内存映射内核对象,MapViewOfFile将内存映射对象映射到当前应用程序的地址空间(即获得内存映射指针)。如果内存映射不与硬盘上的文件相关联的话可以省略第一步,CreateFileMapping第一个参数设为INVALID_HANDLE_VALUE。eg:

HANDLE hFile = CreateFile("FileName", GENERIC_READ | GENERIC_WRITE, 0/*FILE_SHARE_READ | FILE_SHARE_WRITE*/, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hFileMapping = CreateFileMapping(hFile/*INVALID_HANDLE_VALUE*/, NULL, PAGE_READWRITE/*PAGE_READONLY*/, 0, 0, "MappingName");
if (!hFileMapping)
{
	//error
	CloseHandle(hFile);
	
}
pFileMapping = (char*)MapViewOfFile(hFileMapping, FILE_MAP_READ/*FILE_MAP_ALL_ACCESS*/, 0, 0, 0);
if (!pFileMapping)
{
	//error
	CloseHandle(hFileMapping);
	CloseHandle(hFile);
}

关闭内存映射:
if(pFileMapping)
{
	UnmapViewOfFile(pFileMapping);
	pFileMappingDBF = NULL;
}
CloseHandle(hFileMapping);
CloseHandle(hFile);

 打开一个现有的内存映射分两步:OpenFileMapping打开内存映射,MapViewOfFile将内存映射对象映射到当前应用程序的地址空间(即获得内存映射指针),eg:

hSharedMemory = OpenFileMapping(FILE_MAP_READ/*FILE_MAP_ALL_ACCESS*/, FALSE, "MappingName");
if(!hSharedMemory)
{
	//error
}
pSharedMem = (char*)MapViewOfFile(hSharedMemory, FILE_MAP_READ/*FILE_MAP_ALL_ACCESS*/, 0, 0, 0);
if(!pSharedMem )
{
	//error
	CloseHandle(hSharedMemory);
}

关闭使用:
if(pSharedMem)
{
	UnmapViewOfFile(pSharedMem);
	pSrcSharedMem = NULL;
}
CloseHandle(hSharedMemory);


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/milanleon/article/details/79971914

轻松玩坏MyBatis框架

-
  • 1970年01月01日 08:00

Qt内存映射

最近在看代码的时候发现了Qt的内存映射,原来只知道MFC有内存映射机制,可以在读取大数据文件时节约读取的时间,原来Qt中也有相应的机制,其用法更简单,下面用一个小例子演示其用法#include #i...
  • hanshuobest
  • hanshuobest
  • 2017-06-03 00:00:46
  • 1059

windows内存映射

为了说明内存映射的使用方式,下面是个人写的例子:首先创建了一个大于2GB的文件,并写入一定量地测试数据,代码如下:HANDLE hFile = CreateFile("media.mp3", G...
  • jaff20071234
  • jaff20071234
  • 2011-05-07 10:02:00
  • 1213

windows中的内存映射

1. createFile 2. 创建内存映射文件       HANDLE CreateFileMapping(      HANDLE hFile,                    ...
  • u014660247
  • u014660247
  • 2016-10-24 23:27:54
  • 623

x86内存映射

Contents    1 "Low" memory (  1.1 Overview 1.2 BIOS Data Area (BDA) 1.3 Extended ...
  • seek_0380
  • seek_0380
  • 2014-11-20 17:06:45
  • 1749

内存映射与端口映射

一、概念理解    几乎每一种外设都是通过读写设备上的寄存器来进行的。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。C...
  • LNF_2373837248
  • LNF_2373837248
  • 2015-12-14 08:42:30
  • 1073

Linux IPC实践(8) --共享内存/内存映射

概述    共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据(如图)。 共享内存...
  • hanqing280441589
  • hanqing280441589
  • 2015-02-19 14:51:20
  • 2570

windows核心编程-内存映射文件(一)

windows核心编程-内存映射文件 序 Microsoft Windows 提供了三种机制来对内存进行操作。 1、堆-----------最适合用来管理大量的小型对象。 2、虚拟内存-----最适合...
  • windows_nt
  • windows_nt
  • 2013-07-12 00:01:20
  • 3655

大文件内存映射问题

最近一段时间接到朋友的关于大文件分解的一个问题,文件大小不确定,几百M到几个G,对于这样的问题,采用内存映射处理是最为高效的手段需求是这样的,文件包含文件头:136个字节,后面记录的是一条一条的数据包...
  • nk_wang
  • nk_wang
  • 2016-05-27 12:55:37
  • 720

c++ 利用内存映射读取大文件

由于用到的txt存放的数据有几十万行,用getline来读取文件非常慢,搜索了一下可以来优化读取文件的方法。 据说用内存映射读取文件速度快,试了一下,但是发现要分行处理数据时,速度还是挺慢的。 有关内...
  • KUAILE123
  • KUAILE123
  • 2013-09-05 17:16:34
  • 4172
收藏助手
不良信息举报
您举报文章:内存映射
举报原因:
原因补充:

(最多只允许输入30个字)