CreateFileMapping实现的共享内存及用法.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CreateFileMapping实现的共享内存及用法

CreateFileMapping 实现的共享内存及用法 在32 位的Windows 系统中,每一个进程都有权访问他自己的4GB(232=4294967296 ) 平面地址空间,没有段,没有选择符,没有near 和far 指针,没有near 和far 函数调用,也 没有内存模式。 每个进程都有独立的4GB 逻辑地址空间,32 位的Windows 系统允许每一个进程独立访 问自己的内存,即独立于其它进程,也即它自己的32 位逻辑地址空间。操作系统将把每一 个进程的逻辑地址转换成实际的物理地址,独立的地址空间可以使其他已经出错的进程之间 相互隔离,入阁一个进程通过他自己的内存空间处理数据,其他的进程就比在DOS 中安全, 在DOS 中的所有应用程序共享相同的物理内存空间,虽然这带来了许多好处,但在不同进 程之间转的指针,就会出现一些麻烦。在一个进程中,一个给定的逻辑地址将与另一进程的 指针不会有相同的逻辑地址。 那么怎么样才能在32 位的Windows 系统中达到共享内存的目的呢? 随着进程的分离内存空间的出现,进程不能简单地使用 GlobalAlloc()函数来分配内存, 并把它转递给另一个进程来共享,一个进程检查有另一个进程分配的指针,他只是指向随机 地址。然而,在32 位的Windows 系统支持在进程间共享内存映象文件,可以通过内存映象 文件来达到内存共享的目的。 32 位的Windows 系统的虚拟内存系统具有把实际内存映象到页面文件或交换文件的能 力.通过把内存映象到任何想映象的文件,包括系统页面本身,应用程序就可以拓展这种能 力。文件影响能用来提供更快更简捷的文件访问方式,并提供内存共享。 把文件映像到内存,首先必须调用CreateFileMapping()函数,然后再调用MapViewOfFile 函数,把文件视映像到进程地址空间上。 C :专家点评 要把文件映像到内存,首先必须调用CreateFileMapping()函数,它需要用一个由CreateFile() 函数打开并返回的文件句柄,对大多数共享内存应用程序。必须把此句柄设置为 0xFFFFFFFF,用来指定系统页面文件。通过使用上面的特殊句柄,可以不调用 CreateFile 函数,当然在完成时,也不必有一个内存的磁盘文件拷贝。 CreateFileMapping()函数的第二个参数是一个指向SECURITY_ATTRIBUTES 结构的指 针,它指明返回的句柄是否可以被子进程所继承。另外,在SECURITY_ATTRIBUTES 结构 中,也包括一个安全性描述的子指针,它由WinNT 支持它的安全机制。 第三个参数允许指定内存块的访问权限,权限值有 PAGE_READONLY 、 PAGE_READWRITE 和PAGE_WRITECOPY ,PAGE_WRITECOPY 可以在指定页面上拷贝 并写访问。这意味着当一个进程映像此内存并写入时,它将得到自己修改数据的拷贝,面不 是写到共享内存空间,另外,可以把几个标志一起使用来指定其他部分的属性。 其他参数允许指定内存块的最大尺寸,如果内存块的尺寸比第一个 参数中指定的文件 尺寸还要大,这个文件就增大。 最后一个参数为内存映像对象指定名字,通过调用 CreateFileMapping 函数和 OpenFileMapping 函数,其他进程可用这个名字来访问相同的文件映像。 一旦一个内存映像对象由CreateFileMapping()创建成功,可以调用MapViewOfFile 函数 把文件视映像到进程地址空间上,这个函数需要用一个由 CreateFileMapping() 函数或 OpenFileMapping( )函数返回的句柄,并允许指定访问模式和映像的字节数,以及文件映像 对象中的偏移量。另外,还可以使用MapViewOfFileEx() 函数来实现同样的功能,只是此函 数还允许指定映像对象的起始地址。 当用完映像文件后,可以通过调用 UnmapViewOfFile 函数,释放映像内存并把一些映 像数据写入文件(除非它是交换文件),如果想立即把数据写回磁盘文件,那就需要调用 FlushViewOfFile()函数把映像内存写入文件。 为了便于读者对以上程序的理解和进行下一步的学习,这里再简单介绍一下 Win32 内 存模式。在开始学

文档评论(0)

hhuiws1482 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档