利用内存映射文件扩充程序可用的内存

原创 2002年12月27日 09:08:00
 

                    利用内存映射文件扩充程序可用的内存

Windows利用页交换文件来扩充应用程序实际可用的内存,而不仅限于实际的32兆或64兆物理内存。但是Windows的页交换文件是所有程序共用的,所以我们的程序要想获得更大的内存还是比较困难,比如600兆或者更多。难道就没有办法了吗?Windows提供的内存映射文件为我们提供解决问题的途径。

在硬盘上建立一个600兆的文件,然后将它映射到我们进程的地址空间,Windows会返回一个指向这块内存地址的指针,我可以像使用一个600兆的大数组一样使用该指针,Windows会为我们做好从硬盘文件到内存和从内存到硬盘文件的交换工作,就像我们使用Windows本身的虚拟内存一样,不用我们费一点心思,而且速度很快。

具体方法如下:

//在硬盘上建立一个文件,访问标志为可读写

hFile := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

//建文件映射对象, iFileSize指定要建立的映射文件的大小,例如600 iFileSize = 1024 * 1024 *600。当我们打开的硬盘上的文件没有这么大时,Windows会自动将该文件扩展到指定的大小。

hFileMap := CreateFileMapping(hFile, nil, Page_ReadWrite, 0,  iFileSize, nil);

//文件数据映射到进程的地址空间

pData := MapViewOfFile(FMapHandle, FILE_MAP_WRITE, 0, 0, iFileSize);

然后我们就可以通过pData指针充分利用Windows为我们多扩充的这600兆内存了。当然是用完以后,要做一些清场工作。

//进程的地址空间中撤销映射

UnmapViewOfFile(pData);

//闭文件映射对象和打开的文件

CloseHandle(hFileMap);

CloseHandle(hFile);

利用内存映射文件扩充程序可用的内存

Windows利用页交换文件来扩充应用程序实际可用的内存,而不仅限于实际的32兆或64兆物理内存。但是Windows的页交换文件是所有程序共用的,所以我们的程序要想获得更大的内存还是比较困难,比如60...
  • jxzqsun
  • jxzqsun
  • 2006年03月05日 06:46
  • 534

windows 内存映射文件实现数据共享之原理

 内存映射文件编辑 内存映射文件,是由一个文件到一块内存的映射。Win32提供了允许应用程序把文件映射到一个进程的函数 (CreateFileMapping)。内存映射文件...
  • qq51931373
  • qq51931373
  • 2014年07月29日 18:16
  • 1010

利用内存映射文件处理大文件(转载)(修改程序版)

 ----原来作者的程序有些问题,现在文章中的程序已经修改正确---VC中用内存映射文件处理大文件 摘要:本文通过内存映射文件的使用来对大尺寸文件进行访问操作,同时也对内存映射文件的相关概念和一般编程...
  • metasearch
  • metasearch
  • 2008年03月05日 10:08
  • 2684

IPC之Posix内存映射文件详解

1.什么是内存映射文件 内存映射文件,就是把磁盘上的物理文件映射至进程地址空间中,使用内存映射文件的特性是,所有的I/O都是在内核掩盖下完成,我们只需编写存取内存映射区中各个值的代码,也就是不需要...
  • daiyudong2020
  • daiyudong2020
  • 2016年01月10日 20:44
  • 950

内存映射文件 C#

using System; using System.IO.MemoryMappedFiles; using System.Text; namespace MappedMemoryFiles { ...
  • TKDwave520
  • TKDwave520
  • 2015年11月03日 00:06
  • 833

WINDOWS内存映射文件原理分析+代码演示

WINDOWS为任何一个进程都赋予了4G的独立的虚拟地址空间,然而学过OS的都晓得这个只是逻辑上的虚拟的地址空间,进程实际拥有的远小于4GB的物理地址空间。并且进程的虚拟地址空间是每个进程私有的,有操...
  • yiruirui0507
  • yiruirui0507
  • 2011年03月31日 23:57
  • 4748

操作系统 学习笔记3-内存管理

三:内存管理 3.1内存管理的概念 内存管理是操作系统设计中最重要和最复杂的内容之一。操作系统对内存的划分和动态分配,就是内存管理的概念。 有效的内存管理在多道程序设计中非常重要,不仅方便用户使...
  • wm_1991
  • wm_1991
  • 2014年11月19日 00:18
  • 973

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

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

关于内存映射文件技术处理大文件的读写

Windows对文件的读写提供了很丰富的操作手段,如:1. FILE *fp, fstearm...; (C/C++)2. CFile, CStdioFile...; (MFC)3. CreateFi...
  • seu07201213
  • seu07201213
  • 2006年09月02日 11:57
  • 6148

[转][VC/MFC]关于内存映射文件技术处理大文件的读写

Windows对文件的读写提供了很丰富的操作手段,如:1. FILE *fp, fstearm...; (C/C++)2. CFile, CStdioFile...; (MFC)3. CreateFi...
  • believefym
  • believefym
  • 2006年09月02日 21:46
  • 9418
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用内存映射文件扩充程序可用的内存
举报原因:
原因补充:

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