gpt4 book ai didi

python - mmap 多个文件 block 和缓存 mmap 对象 (Python)

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:29 24 4
gpt4 key购买 nike

我不知道我在理解mmap时错过了哪些知识。我就是想不通。但让我这样问我的问题:

  • 我有很多(例如 3 个)文件 block ,其大小分别为 s1、s2、s3。
  • s1、s2 和 s3 均小于 Mmap (SLM) 的大小限制,即 s1 < SLM; s2 < SLM; s3
  • 但是 s1、s2 和 s3 的总和大于 mmap 的大小限制,即 s1 + s2 + s3 > SLM。
  • 我正在考虑映射 3 个文件 block 并将 mmap 对象缓存在 Python 字典中,一个文件 block 对应一个 mmap 对象。

我的问题是:

  • 文件 block 大小的总和 (s1+s2+s3) 是否可以超过 mmap 的大小限制?
  • 那么,mmap如何分配或使用内存和虚拟内存呢?

任何答案都将不胜感激。

最佳答案

我不确定您正在谈论哪个限制,这很可能取决于系统。在Linux中,可以映射的限制取决于RLIMIT_AS和内核配置。根据内存布局,通常您可以进行 mmap 操作而不是进行 malloc(堆分配,大多数 Python 对象所在的位置)。

每个 mmap 的限制可能取决于系统,或者仅仅取决于虚拟内存中仍然可用的连续范围。查看 Linux 中的 /proc/$$/maps 或 Windows 上的调试工具(例如 MHS),就会知道它的外观。主要限制是传递给 mmap 的偏移量必须是 mmap.ALLOCATIONGRANULARITY 的倍数。由于每个 mmap 必须找到一个间隙来适应虚拟内存映射,因此多个 mmap 通常会超过单个可能 mmap 的总大小。可能存在一些额外的约束,例如自动分配的地址仅在特定范围内,并且范围仅限于内核使用。

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

Gustavo Duarte 发表了一篇相当不错的文章,名为 Anatomy of a Program in Memory它显示了虚拟内存通常包含的内容,以及不同操作系统配置的一些示例。比例取决于系统配置(例如/3GB 开关),64 位系统可以拥有更多空间。

关于python - mmap 多个文件 block 和缓存 mmap 对象 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20028494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com