我想mmap
一个大文件进入内存,并顺序解析它。据我了解,如果字节一度被懒惰地读入内存,他们会留在那里。有没有办法定期告诉系统释放先前读取的内容?阅读mmapped数据内存高效
0
A
回答
1
这种理解只是一个非常肤浅的观点。 要了解真正发生的情况,您必须考虑过程的虚拟内存与机器的实际内存之间的差异。映射一个巨大的文件意味着在虚拟地址空间中保留空间。如果在这一点上已经阅读了任何内容,那么这可能与平台有关。当您实际访问数据时,操作系统必须填充实际的内存页面。当您访问其他部件时,这些部件必须被带入内存。当它重新使用内存时,完全取决于操作系统。通常情况下,当您或其他进程访问某些数据并且没有可用内存时会发生这种情况。但随时都可能发生。如果您稍后再次访问它,它可能仍在内存中,或者会被操作系统带回。没有办法让你的过程分清差异。
总之:你不需要关心这一点。操作系统管理所有在后台。
有一点可能是,如果你映射一个非常大的文件,这会占用虚拟地址空间中的空间,这是有限的。所以如果你处理很多巨大的映射和巨大的分配,你可能只想在给定的时间映射文件的一部分。
ADDITION:在想了一下之后,我想出了一个理由,为什么它可能更智能地进行分段顺序。尽管我怀疑你能够衡量这一点。 任何合理OS将寻找一个块卸载时,需要在类似如下的命令:
- 未映射文件(不再需要)
- LRU未修改映射文件(可以从光盘检索)
- LRU改性映射文件(与2,但需要在卸载前盘被更新)
- LRU分配的内存(需要被写入到交换)
所以取消映射块的已知在你不去的时候再次使用它,你会给操作系统一个提示,告诉它们应该尽早释放它们。这会给最近使用的数据,但可能在将来访问的数据留在内存中的机会更大。
相关问题
- 1. 内存/高效数据库条目
- 2. 阅读杜高斯贝数据文件
- 3. 内存高效multivaluemap
- 4. 高效地存储数据
- 5. 高效地阅读两个文本框
- 6. 阅读CSV - 内存问题
- 7. 阅读数组内
- 8. 覆盖mmapped文件中间数据的有效方法
- 9. 从SQL阅读器到数据表的数据 - 无效尝试打电话在阅读器关闭时阅读
- 10. 如何告诉屏幕阅读器应阅读数据内容?
- 11. 高效读写熊猫数据帧
- 12. 高效读取大量数据
- 13. 高效读写mysql数据库
- 14. 阅读内容数据对象
- 15. 阅读Safari数据库内容
- 16. 内存高效排序C++
- 17. Java:内存高效ByteArrayOutputStream
- 18. GAE阅读从数据存储
- 19. 阅读.plist文件数据并用python记录到内存中
- 20. Android阅读pdf元数据 - 内存问题
- 21. 阅读plist存储在内存NSDictionary
- 22. Google阅读器存档Feed无效xml?
- 23. 阅读grib2数据
- 24. 阅读excel数据
- 25. 阅读Json数据
- 26. 阅读firebase数据
- 27. 阅读数据集
- 28. 阅读数据集
- 29. 内存Trie实现的高效数据结构
- 30. 存储数据的高效方式
'总之你:你不需要关心那件事。操作系统在后台管理。“这更好。谢谢! –