SPSYD
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分607分
  • 威望98点
  • 贡献值0点
  • 好评度66点
  • 原创分0分
  • 专家分0分
阅读:1217回复:2

关于windows的文件映射机制,我有些不明白,希望大侠们说一下

楼主#
更多 发布于:2007-03-09 00:58
  文件映射机制是为了提高内存的利用率和提高速度设计的,一般的步骤是:
HANDLE hFile = CreateFile(...);
HANDLE hFileMapping = CreateFileMapping(hFile, ...);
CloseHandle(hFile);
PVOID pvFile = MapViewOfFile(hFileMapping, ...);
,我想知道MapViewOfFile到底是不是将指定的硬盘中的数据拷贝到内存中,还是只是存储他的地址的索引,所有的读写操作都是直接写硬盘,从而提高效率呢。如果MapViewOfFile是将指定的硬盘上的数据读到内存中来,那么不是不会起到提高效率的目的了吗??
希望熟悉这方面的大哥给以指教,谢谢
mfc_boy
驱动牛犊
驱动牛犊
  • 注册日期2003-04-02
  • 最后登录2012-09-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望50点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-15 14:33
在windows技术内幕书中的第17章有这方面的说明,

。。。。
当所有的. e x e和D L L文件都被映射到进程的地址空间之后,系统就可以开始执行. e x e文件
的启动代码。当. e x e文件被映射后,系统将负责所有的分页、缓冲和高速缓存的处理。例如,
如果. e x e文件中的代码使它跳到一个尚未加载到内存的指令地址,那么就会出现一个错误。系
统能够发现这个错误,并且自动将这页代码从该文件的映像加载到一个R A M页面。然后,系
统将这个R A M页面映射到进程的地址空间中的相应位置,并且让线程继续运行,就像这页代
码已经加载了一样。当然,这一切是应用程序看不见的。当进程中的线程每次试图访问尚未加
载到R A M的代码或数据时,该进程就会重复执行。
。。。

还有一些图,估计你看了图应该就了解了
nangfeng
驱动牛犊
驱动牛犊
  • 注册日期2006-06-03
  • 最后登录2014-07-23
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望183点
  • 贡献值0点
  • 好评度51点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-15 14:43
这种问题,自己看书把..
游客

返回顶部