gpt4 book ai didi

c++ - C++中内存池的探究

转载 作者:行者123 更新时间:2023-11-30 03:04:11 24 4
gpt4 key购买 nike

是否可以创建遵循简单逻辑的内存池实现:

1 - 分配 n 字节的内存池。

2 - 使用修改后的 new();不分配内存的函数/运算符只会获得指向内存池开头的指针。以这种方式动态创建对象而不会产生开销。

3 - 当内存池不足时,它会释放剩余的内存并分配一个新的内存池

4 - 在第一个内存池中创建的对象将根据其大小保留以获取内存。第一个池中分配的内容与当它用完时返回的内容之间的差异由对象在删除时恢复。

我担心的主要是我不知道如何删除比分配的内存池小的内存池,请记住,除了内存池对象末尾留下的内容之外,还有一个操作系统头在池中分配的第一个对象之前的内存池。我需要什么方法来确保没有内存泄漏,删除多余的内存池不会删除其中分配的对象,并且内存池片段的 header 已安全删除。

谢谢!

编辑:请注意,其目的是让内存由内存池分配并由对象释放,它们可能具有不同的生命周期。如果这是可能的...

最佳答案

首先,如果您想知道应该搜索什么,这听起来像是一个竞技场分配器(如评论中所述)。

请注意,竞技场只有在您打算立即拆除整个东西时才真正有用;如果您希望从已删除的对象中回收内存以供重新使用,您最终会在 arena 之上编写自己的堆。如果您只是想让 arena-chunk 保持事件状态直到最后一个对象被释放,您可以使用 refcount 进行管理。

其次,我所知道的分配内存的唯一常用方法是使用内存映射,您可以稍后在不移动的情况下缩小内存(如 realloc):这是特定于平台的。

关于c++ - C++中内存池的探究,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8880754/

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