内存共享的问题,N个进程读同一文件,内存不足,要用内存共享的方法.给点意见,进来有分,不够再给,UP有分!!

hdp4820 2004-03-24 10:06:19
现在有三个进程,可能都要从数据库中读取同一份文件,大家都知道这个原理,先从硬盘上读取数据,然后放入内存中,再读取内存中的数据!
但是现在这个数据可能很大,会造成内存不足,我的目的就是通过文件映射再创建一块虚拟内存的方法,把这三个进程的可能都要访问到的数据先放入这个虚拟内存中,同时就可以读取这些数据了。
比如说吧,有一个很大的二维或者三维数组,有三个函数要对它进行访问,可是每次都可能要把这个数组都放入内存中,现在就是把这个数组给放在虚存中了,每次读都读虚存里的数据就可以了!请大家给些好的方法,或者一些可行的代码。谢谢。分不够再给。这是一个很挑战性的工作,希望每个人都能留下一点意见。
...全文
46 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
九重霄 2004-03-31
  • 打赏
  • 举报
回复
up,接分
jilvensu 2004-03-27
  • 打赏
  • 举报
回复
最近女友分手,无心回答,但即然看了也UP一下
enoloo 2004-03-27
  • 打赏
  • 举报
回复
用virtualalloc会影响速度的。用文件映射比较好,而且基本上他所支持的文件大小应该能满足你的要求了。
Northeast 2004-03-26
  • 打赏
  • 举报
回复
第一步:创建文件对象,有两个函数
HFILE WINAPI OpenFile(LPCSTR lpFileName,LPOFSTRUCT lpReOpenBuff,UINT uStyle);
可以这样调用
HFILE hfile;
OFSTRUCT of;
hfile=OpenFile("File.dat",&of,OF_READ|OF_SHARE_EXCLUSIVE);
if(hfile==-1)
{//Error}
还有一个
HFILE hfile;
hfile=CreateFile(achFile,//Filename
GENERIC_READ,//Access mode
0,//Share
0,//Security
OPEN_EXISTING,//Create flags
FILE_ATTRIBUTE_NORMAL,//File attributes
0);//File emulate
if(hfile==-1)
{//Error}
第二步:创建文件映射对象
HANDLE hfm;
hfm=CreateFileMapping(hfile,
0,//Security Ptr
PAGE_READONLY,//Pg protection
0,//Size of high 32 bits
dwFileSize,//Size of low 32 bits
0);Mapping name
共享单一文件映象的方式之一是给这个文件映象起一个名称,然后当两个或多个进程用同一个名称调用CreateFileMapping时,就可以共享


Northeast 2004-03-25
  • 打赏
  • 举报
回复
进程间的内存共享用内存映射文件
我正在看这部分的内容,有收获再告诉你
GodInNight 2004-03-25
  • 打赏
  • 举报
回复
同意VirtualAlloc.

32位的Windows除了Windows Advance Server支持3G内存寻址外,其他的都最大支持2G
Windows 2003不知道。

所以我们要64位OS.这样我们就不必外硬盘上自己倒了。
蒋晟 2004-03-24
  • 打赏
  • 举报
回复
用VirtualAlloc就可以了
flyelf 2004-03-24
  • 打赏
  • 举报
回复
作一个dll,把数据放在共享段中,当然还需要添加一些同步机制
xstring 2004-03-24
  • 打赏
  • 举报
回复
to ymbymb: 大于2G的文件就不成,内存空间不够

windows nt开始以后就支持大于2G的文件了
hdp4820 2004-03-24
  • 打赏
  • 举报
回复
提供一些函数和它们的头文件!谢谢了!
ymbymb 2004-03-24
  • 打赏
  • 举报
回复
用内存映射文件,多大的文件都可以访问到;
HANDLE hFile = CreateFile(...);
HANDLE hMap = CreateFileMapping(...);
LPVOID ptr = MapViewOfFile(...);
xstring 2004-03-24
  • 打赏
  • 举报
回复
数据很大,内存很小这个问题很早就有了

要不也不会出现外部排序算法了

一般情况下,都是分段处理的

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧