C/C++(5)实现大数据文件的内存映射机制
2016-09-26 14:57
387 查看
摘要
本文主要讲述大量数据的文件的内存映射机制的实现。
1. 内存映射
内存映射文件,是由一个文件到一块内存的映射。Win32提供了允许应用程序把文件映射到一个进程的函数 (CreateFileMapping)。内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而且在对该文件进行操作之前必须首先对文件进行映射。使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。
2. 实现
本文主要讲述大量数据的文件的内存映射机制的实现。
1. 内存映射
内存映射文件,是由一个文件到一块内存的映射。Win32提供了允许应用程序把文件映射到一个进程的函数 (CreateFileMapping)。内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而且在对该文件进行操作之前必须首先对文件进行映射。使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。
2. 实现
#include "stdafx.h" #include "windows.h" #include <iostream> #include <fstream> using namespace std; int main(int argc, _TCHAR* argv[]){ //// Open the file that we want to map. HANDLE hFile = ::CreateFile(L"C:/Users/Joe WANG/Desktop/Data.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // Create a file-mapping object for the file. HANDLE hFileMapping = ::CreateFileMapping(hFile, NULL, PAGE_WRITECOPY, 0, 0, NULL); // Now map the file PCHAR pbFile = (PCHAR)::MapViewOfFile(hFileMapping, FILE_MAP_COPY, 0, 0, 0); // Print result printf("%s\n", ((string)pbFile).c_str()); // Close all file handle ::UnmapViewOfFile(pbFile); ::CloseHandle(hFileMapping); ::CloseHandle(hFile); return 0; }
相关文章推荐
- c++实现使用内存映射文件处理大文件
- windows 内存映射文件实现数据共享之原理
- 通过内存映射文件实现进程间数据共享
- Windows内存管理机制及C++内存分配实例(四):内存映射文件
- 用Windows的文件映射机制,实现大批量数据的快速存储
- 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
- 内存映射文件详解-----C++实现(即一块内存和一个文件相映射对应)
- 内存映射文件详解-----C++实现
- 利用java内存映射文件机制实现CRC循环冗余校验
- 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
- c++ 内存映射文件进程间共享数据
- 用Windows的文件映射机制,实现大批量数据的快速存储
- 利用java内存映射文件机制实现CRC循环冗余校验
- 内存映射文件详解-----C++实现
- 汇编中内存映射文件的概念 and 内存映射文件的实现原理
- C++中使用内存映射文件处理大文件
- 用文件映射(File Mapping)实现进程间内存共享
- windows笔记-使用内存映射文件在进程之间共享数据
- windows笔记-内存映射文件与数据视图的相关性
- C++ 类静态数据成员除了要声明外,还要在类实现文件中进行定义。