服务器之家

服务器之家 > 正文

C语言实现大数据文件的内存映射机制

时间:2021-04-25 14:32     来源/作者:C语言中文网

C语言实现大数据文件的内存映射机制

摘要

本文主要讲述大量数据的文件的内存映射机制的实现。

1. 内存映射

内存映射文件,是由一个文件到一块内存的映射。Win32提供了允许应用程序把文件映射到一个进程的函数 (CreateFileMapping)。内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而且在对该文件进行操作之前必须首先对文件进行映射。使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。

2. 实现

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#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;
}
标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
返回顶部