我不知道我理解mmap的错误。我只是想不出来。但是让我这样问我的问题:
我的问题是:
任何答案都会受到谴责。
答案 0 :(得分:1)
我不确定你说的是哪个限制,这可能与系统有关。在Linux中,可以映射多少的限制取决于RLIMIT_AS和内核配置。根据内存布局,通常可以使用mmap而不是malloc(堆分配,大多数Python对象所在的位置)。
每mmap限制可能取决于系统,或者仅取决于虚拟内存中仍有哪些连续范围。查看Linux中的/proc/$$/maps
或Windows上的MHS等调试工具将告诉您它的外观。主要限制是传递给mmap的偏移量必须是mmap.ALLOCATIONGRANULARITY
的倍数。由于每个mmap必须找到适合虚拟内存映射的间隙,因此多个mmaps通常可能超过单个可能mmap的总大小。可能存在一些附加约束,例如仅在某个范围内的自动分配地址,以及仅限于内核使用的范围。
在任何时候找到映射数量的限制也就不足为奇了;如果你做了很多映射,你可能需要关闭那些你不需要的映射。
Gustavo Duarte发布了一篇名为Anatomy of a Program in Memory的相当不错的文章,该文章展示了虚拟内存通常包含的内容,以及不同操作系统配置的一些示例。比例取决于系统配置(例如参见/ 3GB开关),64位系统可以有更多空间。