gpt4 book ai didi

c++ - 内存映射文件和实际内存使用情况如何?

转载 作者:可可西里 更新时间:2023-11-01 10:58:05 24 4
gpt4 key购买 nike

真的找不到任何关于这个的细节,这里是我所知道的关于 Windows 中的 mmf 的所有信息:

  1. 在 Windows 中创建内存映射文件不会增加程序使用的表观内存量
  2. 创建该文件的 View 消耗的内存相当于 View 大小

这对我来说看起来很倒退,因为一方面,我知道 mmf 本身实际上有内存……在某处。如果我在 mmf 中写一些东西并破坏 View ,数据仍然存在。同时,为什么 View 会占用任何内存?它只是一个指针,不是吗?

然后是 ram 中的实际内容和磁盘中的内容的奇怪之处。在具有分布式访问模式的大型 mmf 中,有时速度很快,有时则不然。我猜其中的一些有时会存储在文件中,如果一个与它或分页文件相关联,但实际上,我不知道。

无论如何,促使我对此进行调查的问题是我有一个 ~2gb 文件,我希望多个程序共享该文件。我无法在每个 View 中创建一个 2gb 的 View ,因为我只是“内存不足”,所以我必须创建/销毁较小的 View 。由于额外的偏移量计算和 View 本身的创建,这会产生大量开销。谁能向我解释为什么会这样?

最佳答案

在像 Windows 这样的请求分页虚拟内存操作系统上,MMF 的 View 占用地址空间。只是处理器的编号,每个 4096 字节一个。在实际使用 View 之前,您才开始使用 RAM。读取或写入数据。此时您触发页面错误并强制操作系统将虚拟内存页面映射到物理内存。 “请求分页”部分。

您无法在 32 位进程中获得 2 GB 地址空间的单个 block ,因为没有空间容纳其他任何东西。该限制是代码和数据的其他分配之间的地址空间中最大的空洞,通常徘徊在 ~650 兆字节左右,或多或少。您需要以 x64 为目标。或者构建一个与/LARGEADDRESSAWARE 链接并在 64 位操作系统上运行的 x86 程序。最近变得毫无意义的后门。

关于c++ - 内存映射文件和实际内存使用情况如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33046259/

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