HANDLE hMapOjb = CreateFileMapping( hFile, null, PAGE_READWRITE|SEC_RESERVE, 0, 0, null)
TCHAR* pBuf = (LPTSTR) MapViewOfFile( hMapObj, FILE_MAP_WRITE, 0, OFFSET, 10MB)
然后就对 pBuf进行 *** 作。
注意控制参数的调整,
首先调用CreateFileMapping创建文件映射对象,然后调用MapViewOfFile映射文件内容到内存地址。直接读写这个内存地址,完成后调用UnmapViewOfFile关闭映射,再调用CloseHandle关闭CreateFileMapping创建的对象。之前对那个映射的内存地址的 *** 作就会反映到文件中。内存映射文件是由一个文件到一块内存的映射,使进程虚拟地址空间的某个区域与磁盘上某个文件的部分或全部内容的建立映射。建立映射后,通过该区域可以直接对被映射的磁盘文件进行访问.而不必执行文件I/O *** 作也无需对文件内容进行缓冲处理。
就好像整个被映射的文件都加载到了内存一样,因此内存文件映射非常适合于用来管理大文件。
内存映射文件对程序的提速,只在处理大文件或非常频繁的文件读写 *** 作时效果才明显。
通过内存映射,相当于将磁盘上的文件所在空间建立成一块虚拟内存,程序访问时可按内存的方式进行,省去了普通io方式的一些环节,其实真正要读写 *** 作时,会进行换页,将这些个“虚拟内存”读到物理内存中。
总之,内存映射文件是应用虚拟内存的技术来达到加速处理的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)