gpt4 book ai didi

c++ - 基于文件的内存池——这可能吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:43 24 4
gpt4 key购买 nike

每当使用新的/malloc 时,操作系统都会创建一个新的(或重复使用的)堆内存段,与页面大小对齐并将其返回给调用进程。所有这些分配将构成进程的虚拟内存。在 32 位计算中,任何进程最多只能扩展到 4 GB。堆分配越高,进程内存的增加率越高。尽管有很多可用的内存管理/内存池,但所有这些实用程序最终都会再次创建堆并有效地重用它。

另一方面,mmap(内存映射)提供了将文件可视化为内存流的能力,并使程序能够直接在文件上使用指针操作。但在这里,mmap 实际上是分配进程空间中的地址范围。因此,如果我们映射一个大小为 3GB 的 3GB 文件并对进程进行 pmap,您可以看到进程消耗的总内存 >= 3GB。

我的问题是,是否有可能有一个基于文件的内存池[就像映射一个文件],但是,不构成进程内存空间。我想象一些类似内存数据库的东西,它由一个文件支持,它的读/写速度非常快,它支持指针操作[即获取一个指向记录的指针并存储任何东西,就像我们使用 new/malloc 一样],它可以在磁盘上增长,而不会触及进程虚拟 4GB 的限制。

这可能吗?如果是这样,有什么建议可以让我开始工作。我不是要现成的解决方案/链接,而是要从概念上理解它是如何实现的。

最佳答案

这通常是可能的,但非常复杂。如果您想访问文件的不同 3Gb 段,则必须重新映射,这可能会在分散访问的情况下降低性能。指针只会变得更加难以使用,因为 remmpaing 更改了数据但地址保持不变。我看过STXXL您可能感兴趣的项目;或者它可能不会。我从未使用过它,所以我无法就此给您任何其他建议。

关于c++ - 基于文件的内存池——这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22267245/

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