首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mmap多个文件块和缓存mmap对象(Python)

mmap多个文件块和缓存mmap对象(Python)
EN

Stack Overflow用户
提问于 2013-11-17 07:50:30
回答 1查看 884关注 0票数 1

我不知道为了理解mmap我错过了什么知识。我就是搞不懂。但让我这样问我的问题:

  • 我有很多,比如说,3个文件块,其中大小是s1、s2、s3。
  • s1、s2和s3均小于Mmap的大小限制,即s1 < SLM;s2 < SLM;s3 < SLM。
  • 而s1、s2和s3均大于mmap的大小限制,即s1 + s2 + s3 > SLM。
  • 我正在考虑映射这3个文件块,并将mmap对象缓存到Python字典中,其中一个mmap对象用于文件块。

我的问题是:

  • 文件块大小(s1+s2+s3)的总数能否超过mmap的大小限制?
  • 在这种情况下,mmap如何分配或使用内存和虚拟内存?

任何答案都会被确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-17 11:27:20

我不知道你说的是哪一个限制,这很可能是系统依赖的。在Linux中,对映射多少的限制取决于RLIMIT_AS和内核配置。根据内存布局的不同,mmap比malloc (堆分配,大多数Python对象所在的地方)更常见。

每个mmap限制可能是系统依赖的,或者仅仅取决于虚拟内存中仍然可用的连续范围。看看Linux中的/proc/$$/maps,或者像Windows这样的调试工具,就会告诉你这是什么样子的。主要限制是传递给mmap的偏移量必须是mmap.ALLOCATIONGRANULARITY的倍数。由于每个mmap必须在虚拟内存映射中找到适合的间隙,因此多个mmap通常可以超过单个可能mmap的总大小。可能存在一些附加的约束,例如自动分配的地址仅在某个范围内,范围仅限于内核使用。

在任何时候发现映射数量的限制也就不足为奇了;如果您正在执行许多映射,则可能必须关闭不需要的映射。

Gustavo发表了一篇相当不错的文章,名为记忆程序的剖析,它展示了虚拟内存通常包含的内容,以及一些不同操作系统配置的示例。比例取决于系统配置(例如,请参阅/3GB交换机),64位系统可以有更多的空间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20028494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档