我不知道为了理解mmap我错过了什么知识。我就是搞不懂。但让我这样问我的问题:
我的问题是:
任何答案都会被确定。
发布于 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位系统可以有更多的空间。
https://stackoverflow.com/questions/20028494
复制相似问题