内存映射文件mmap
一、简介
内存映射文件,是由一个文件到一块内存的映射。内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而且在对该文件进行操作之前必须首先对文件进行映射。使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。
内存映射mmap是Linux内核的一个重要机制,它和虚拟内存管理以及文件IO都有直接的关系。Linux的虚拟内存管理是基于mmap来实现的。vm_area_struct是在mmap的时候创建的,vm_area_strcut代表了一段连续的虚拟地址,这些虚拟地址相应地映射到一个后备文件或者一个匿名文件的虚拟页。一个vm_area_struct映射到一组连续的页表项。页表项又指向物理内存page,这样就把一个文件和物理内存页相映射。
二、示例说明
1、创建一个临时示例文件
#-*- coding:utf-8 -*-
with open("hello.txt", "w") as f:f.write("flags specifies the nature of the mapping. MAP_PRIVATE creates a private copy-on-write mapping, so changes to the contents of the mmap object will be private to this process, and MAP_SHARED creates a mapping that's shared with all other processes mapping the same areas of the file. The default value is MAP_SHARED\n")f.write("prot, if specified, gives the desired memory protection; the two most useful values are PROT_READ and PROT_WRITE, to specify that the pages may be read or written. prot defaults to PROT_READ | PROT_WRITE\n")
2、打开一个内存影射文件,并操作
#!/usr/bin/env python
#-*- coding:utf-8 -*-import mmap
with open("hello.txt", "r+") as f:mm = mmap.mmap(f.fileno(), 0)print(mm[:])
3、修改内存,就是修改文件
#!/usr/bin/env python
#-*- coding:utf-8 -*-import mmap
with open("hello.txt", "r+") as f:mm = mmap.mmap(f.fileno(), 30,access=mmap.ACCESS_WRITE)print(mm[:])mm[6:15] = b'SPECIFIES' #索引从0开始的print(mm.readline())mm.close()
更多请点击
内存映射文件mmap相关推荐
- 内存映射文件mmap原理分析
本文来说下内存映射文件 mmap 原理 文章目录 mmap原理分析 mmap原理分析 假设我们要把一个磁盘文件映射到内存里来,然后把映射到内存中的数据通过socket发送出去. 零拷贝有两种实现方式, ...
- MongoDB内存映射文件
2019独角兽企业重金招聘Python工程师标准>>> Mongodb源码分析--内存文件映射(MMAP) 内存映射文件原理探索 Linux 内存映射函数 mmap()函数详解 Li ...
- [译].NET 4 中玩耍内存映射文件
原文链接 : http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net- ...
- 重新认识 Java 中的内存映射(mmap)
mmap 基础概念 mmap 是一种内存映射文件的方法,即将一个文件映射到进程的地址空间,实现文件磁盘地址和一段进程虚拟地址的映射.实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而 ...
- Java 中的内存映射(Mmap)
day2:将原来普通读取文件的方式改为内存映射文件的方式. mmap 是一种内存映射文件的方法,即将一个文件映射到进程的地址空间,实现文件磁盘地址和一段进程虚拟地址的映射 Java 中的 mmap J ...
- 使用内存映射文件在进程之间共享数据
数据共享方法是通过让两个或多个进程映射同一个文件映射对象的视图来实现的,这意味着它们将共享物理存储器的同一个页面.因此,当一个进程将数据写入一个共享文件映射对象的视图时,其他进程可以立即看到它们视图中 ...
- 使用内存映射文件来提高你程序的性能
本人在学习<WINDOWS核心编程>的时候对JEFFREY大师提到的一个小程序写了两个版本来比较性能,该程序的原始需求是这样的:对一个大文件进行倒序,也就是将一个文件头变成尾,尾变成头. ...
- windows笔记-内存映射文件
Windows提供了3种进行内存管理的方法: • 虚拟内存,最适合用来管理大型对象或结构数组. • 内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行的多个进程之间共享数据. ...
- java 内存映射文件进程间通讯_[转]Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile...
进程间的通信方式有很多种, 上次我们说了最傻瓜的"共享外存/文件"的方法. 那么, 在本文中, 我们即将学习"共享内存"的方式实现进程间的通信, 这是IPC最快 ...
- 内存映射文件(File Mapping)API
1.HANDLE CreateFileMapping( HANDLE hFile, // 一个文件句柄 LPSECURITY_ATTRI ...
最新文章
- 最近在做托盘时,发现 CnTrayIcon1的OnClick 事件,不能被其它按钮来执行,蛋疼。...
- 记录安装oracle的那些事(二)之双系统安装
- uml 时序图_UML学习-14种UML图
- 腾讯电脑管家13内测版官方下载地址
- python3调用c语言数组,使用Python中的ctypes访问数组
- 4 种方法!检查字符串是否为合法的日期格式
- JavaBean、bean、POJO
- left join嵌套selelct语句格式_SQL Formatting Rule 格式化行业规范
- tabcontrol选项卡颜色把文字覆盖了_文字拆分神器,这3个PPT插件满足你的所有需求...
- python: 基本的日期与时间转换
- 【视频】R语言中的分布滞后非线性模型(DLNM)与发病率,死亡率和空气污染示例
- 嵌入式linux摄像头录像存储,韦东山嵌入式Linux_3期之USB摄像头监控_手机App增添录像功效(二)...
- 视觉媒体通信作业记录(四)视频网络传输
- 计算机驱动程序检测,检测到计算机制造商图形驱动程序对于显卡驱动程序
- linux ld so 源码分析,ld.so分析2
- macOS下载【转载】
- 180余件河北武强年画珍品亮相新疆昌吉回族自治州博物馆
- 高清视频体验大幅提升,来数数我们应用了哪些新算法
- 机械键盘 单个按键不灵 修理
- qda二次判别_判别分析-GDA、QDA、KNN