- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
以我的理解,mmap 一个适合 RAM 的文件就像将文件放在内存中一样。
假设我们有 16G 的 RAM,我们首先 mmap 一个我们使用了一段时间的 10G 文件。这在访问方面应该是相当有效的。如果我们然后映射第二个 10G 文件,是否会导致第一个文件被换出?还是其中的一部分?如果是这样,这将在什么时候发生?在 mmap 调用时,还是在访问新加载文件的内存区域时?
如果我们想再次访问第一个文件指针的内存,是否会再次加载交换文件?那么,假设我们在对应于第一个文件和第二个文件的内存之间交替读取,这会导致灾难性的性能吗?
最后,如果以上任何一条为真,mmap 几个较小的文件会更好吗?
最佳答案
如前所述,您的文件将按页面访问;在 x86_64(和 IA32)架构上,一个页面通常为 4096 字节。因此,在 mmap 时间加载的文件很少(如果有的话)。第一次访问任一文件中的某个页面时,内核将生成一个 page fault。并加载你的一些文件。内核可能会预取页面,因此可能会加载多个页面。它是否这样做取决于您的访问模式。
一般来说,如果你的 working set 表现不错适合内存。也就是说,如果您只是定期访问两个文件中的 3G 文件,那么只要您的进程有 3G 的 RAM 可用,通常情况应该没问题。
在 64 位系统上,没有理由拆分文件,如果您需要的部分适合 RAM 就没问题。
请注意,如果您映射现有文件,则不需要交换空间来读取该文件。当一个对象由文件系统上的文件支持时,内核可以从该文件而不是交换空间读取。但是,如果您在对 mmap 的调用中指定 MMAP_PRIVATE,则可能需要交换空间来保存更改的页面,直到您调用 msync。
关于linux - mmap'ed内存何时以及如何换入和换出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43541420/
我似乎对 git 存储库有权限问题。 当我 pull 入一个不是我的 Linux 用户创建的目录时,我出现了这个错误。 fatal: Unable to create '/home/---/.git/
在 Git 中,您可以将给定目录克隆到给定目录: git clone ssh://gitolite@dev.bipper.com:3687/com/bipper/kids/portal 当我运行我们
目前,如果您在分支 V2 中并执行“git pull origin V3”,它会将 V3 merge 到 V2,甚至不会发出警告或提示。这个选项可以以某种方式被阻止吗?我在这里阅读了所有类似的问题,人
我刚开始使用 Oracle 的 Coherence 缓存,我注意到这一点:如果我在缓存中放入一个 ConcurrentHashMap 对象,当我检索它时,我可以看到它被转换为一个普通的 HashMap
看起来我缺少对 git pull 和 git commit 的基本理解,假设我在分支上工作,而它在我更新时被其他开发人员更新了在本地做我的工作。我应该在发出 git pull 之前提交更改,还是应该执
好的。所以我以为我已经舔过了……但现在…… 我有一个项目,其中包含一个来自 GitHub 的小型库作为子模块。在该 super 项目的原始版本中,子模块按预期工作。 但是,我只是克隆了 super 项
使用 Visual Studio Code 中的内置 Git,我看不到将指定的远程分支 pull 入当前分支的方法。我可以这样做吗? 示例:我正在分支 myBranch 上工作,更改已 merge 到
当我尝试提交或 pull 此错误时 Bus error (core dumped) 发生了! 当我用 gdb 调试它时,(gdb git,run commit -a,where) 结果是: mucul
我对默认 Rails Rake 任务的预期用途有点困惑,想咨询一下我是否应该使用 db:reset或编写自定义 Rake 任务。没什么聪明的,只是日常管理,而且我很可能会错过一个明显的文档,因为我是
所以我做了: git reset --hard #commithash # make a bunch of changes, fixes and so on. git add -A git commi
我已使用以下命令成功部署到 firebase 托管应用: firebase init firebase deploy 在这个阶段,我正在执行 git pull 以将 repo 下 pull 到暂存服务
当尝试在 Eclipse 的 git 存储库中 pull (团队|从上下文菜单中 pull )时,出现 Could not get advertised Ref for branch refs/hea
我是一名优秀的程序员,十分优秀!