内存映射处理大数据_第1页
内存映射处理大数据_第2页
内存映射处理大数据_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、内存映射处理大数据 (2021-05-12 18:28:24)分类:标签:最近为了写这个花了好几天时间 . 速度总算是提升了不少1.用途和根本操作 用于不同进程之间的内存共享操作,可以将一个物理文件映射到内存当中然后直接利用分 配到 的或者翻开的命名共享内存的地址空间实现资源共享访问2.相关流程1) 新建命名共享内存首先利用 CreateFile 或者 CreateFi 1 eForMapping 获得一个用于映射的物理文件句柄,然后 利 用该文件句柄结合 CreateFileMapping 得到一个命轻的共享内存映射文件句柄。/CreateFileMapping 为指左文件创立一个有冬或无名

2、的文件映象:HANDLE CreateFileMapping(HANDLE hFile, / 映射文件的句柄LPSECURIT Y.AHRIBUTES Ip订eMappingAttributes, / 平安描述符/ 对映射对象的保护指针 / 对象最大长度的髙 32 位DWORD fIProtect,DWORD dwMax i mumS i z eHi gh,DWORD dwMax i mumS i z eLow,LPCTSTR IpName) ; 注意 : hFiIe :映射文件的句柄,文件的翻开模式必须 fIProtect 参数指左的相一致:如果 这个参数值为OxFFFFFFFF那么必须在

3、dwMaximumSizeHigh和dwMaximumSizeLoW参数中指宦映 射对象的大小。并且将在操作系统虚拟内存页而替换文件中创立文件映射对象,而不是使用磁盘文件,同时必须给出这个映射对象的大小。文件映射对象通过副本,遗传或名字来共享。IpFi 1 eMappingAttributes : 全描述符指针,决定返回句柄是否能被子进程继承,如果是 NULL, 那么子进程不能继承° WinNt中,如果是NULL,那么文件映射对象得到一个默认的安全描述符。fIProtect :为得到的文件试图指左保护模式,可以被设宜为以下值 :PAGE.READONLY只:读属性,并且hFile对应

4、的文件必须以GENERIC_REA形式翻开。PAGE.READ9TE可读可写属性,并且 hF订e对应的文件必须以 GENERIC_REA和 GENERIC.WRITE形 式翻开。PAGE_WRITECQP对可写区域复制后操作,并且hFile对应的文件必须以 GENERIC.REA和GENERIC.WRITE形 式翻开。dwMaximumSizeHigh, dwMaximumSizeLow如果这两个参数为 0,那么文件映射对象的最大长度等于 hFile 指泄的文件长度。IpName:文件映射对象的名字,如果这个名字已存在,那么按照 flProtect 指定的来处理映射 对象。如果此参数为空,那么

5、创立一个无名字的文件映射对象。如果此参数的名字与系统事件 字相同,那么函数执行失败,GetLastError 返回ERROR_IWALID_HANDLE返回值:函数调用成功返回文件映射对象的句柄,如果文件映射对象已经存在那么返回原有映 对象的句柄,GetLastError 返回函数执行失败返回 Null。2) 翻开命名共享内存如果需要共享已经存在的命名共享内存映射文件,使用Ope nF订eMappi ng函数。/Ope nFileMappi ng 翻开一个已命名的文件映射对象HANDLE Ope nFileMappi ng(DWORD dwDesiredAccess, / 访问模式BOOL b

6、lnheritHandle,/ 继承标志LPCTSTR lpName/文件映射对象名指针 dwDesiredAccess :访问模式?与MapViewOfFile中的访问模式相同。bln heritHa ndle :继承标志,是否可以被一个新的进程继承使用,如果为TRUE就可以被进程继承句柄。返回值:成功返回一个已命名的文件映射对象,失败返回NULLo3) 获得地址空间指针进行内存映射文件的读写和一般的文件读写不同,是直接而对你申请的地址空间,为此需 用MapViewOfF订亡得到相关的地址 LPVOID类型的指针。如果需要进行文件写入,可以 型转换直接对于内存地址进行赋值,比方:memcpy

7、( IpAddress, lpBuf,.)的名射一个新要使通过类这里自然需要防I上内存溢岀的情况。如果是读取操作,将参数顺序调整一下就可以了/ 已创立的文件映射对象句柄/ 映射/ 视文访图问件的模大式小MapViewOfFile 在调用进程的地址空间映射一个文件视图HANDLEhFileMappingDWORDdwFNDieulesmOirbeffedsreAOtcHfcBiegysthes,s, ToMap/ 文件 偏移的 dwFileOffsetLow, 髙 32 位LPVOID MapVieOfF 订已;注意: hFileMappingObject : 由 CreateFileMappi

8、ng 或 OpenFileMapping 返回的文件映射对 象 句柄。dwDesiredAccess :映射视图的访问模式与创立文件映射对象的保护模式flProtect 有关,可以被设置为以下值:FILEJIAPJ9TE : 一个可读写属性的文件视图被创立,保护模式为PAGE.READWRITEFILE_MAP_READ : 一个只读属性的文件视图被创立,保护模式为PAGE_READWRI或EPAGE READONLYFILE_MAP_ALL_ACCESS与 FILE_MAP_WRITE模式相同FILEJIAP.COP Y:保护模式为PAGEJRITECOP时,得到一个视图文件,当你对视图文件

9、写操作时,页面自动交换,并且你所做的修改不会损坏原始数据资料。dwNumberOfBytesToMap映射文件局部的大小,如果为 0,那么映射整个文件。返回值:如果成功返回返回映射视图的起始地址,如果失败返回 NULLo4MapView0fFileEx 在调用进程的地址空间映射一个文件视图,并且允许调用进程为映射 图指定特殊的内存地址LPVOID MapViewOfFileEx(HANDLE hFileMappingObject,/ 文件 映射对 象的句DWORD dwFile Offset/ 文件偏移的高 32 位/ 访问模式DWORD dwFi1e Offset/ 文件LPVOID lpB

10、ase AddresDWORD dwNumberOfBytesToMap/ 指泄映射视图的其实内存地址, / 映射视图的大小; 注意: 与 MapVieuOfFile 用法相同,但是如果指左的内存地址空间大小不够,那么函数执行失败。5将内存复制到所映射的物理文件上面FlushMapVie八OfFile 函数可以将内存里面的内容DUM到物理磁盘上而FlushViewOfF 订 e 把文件映射视图中的修改的内容或全部写回到磁盘文件中BOOL FlushViewOfFile LPCVOID lpBaseAddress,/ 修改内容的起始地址DWORD dwNumberOfBytesToFlush / 修改的字节数目;函数执行成功返回非零。6卸载内存映射文件地址指针UnmapVi ewOf fFi 1 e函数就是卸载UnmapViewOfFile 删除文件的映射视图BOOL UnmapVieAfF订

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论