c - 增长(和收缩)内存池

标签 c memory-management memory-pool

假设,为了问题的目的,我们有一个内存池,最初分配了 n 个 block 。但是,当达到容量时,池想要增长并变成原来大小的两倍 (2n)。

现在可以使用 C 中的 realloc 完成此调整大小操作,但是函数本身可能会返回指向不同内存的指针(旧数据已复制)。

这意味着内存池分配器返回的指针可能不再有效(因为内存可能已被移动)。

克服这个问题的好方法是什么?还是根本不可能?

最佳答案

从多个不连续的内存池中分配。当一个池已满时,分配第二个池,使其位于虚拟地址空间中的其他位置。

那么问题之一就是跟踪您的池的位置。通常,您会使用每个池中的一些空间来记账。例如,您可以保留一个指针的空间来保存所有池的简单线性链表。更复杂的分配器往往需要更多的簿记开销。

关于c - 增长(和收缩)内存池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353615/

相关文章:

使用 gdb 调试时的字符/字符串输入

c++ - 分配器如何创建和销毁数组?

iphone - 使用 RGB 方法的 UICOLOR 颜色中的内存泄漏

c++ - 使用 boost singleton_pool 的自定义分配比默认慢

从 Ada 捕获 C 代码中的内存异常

c - 使用 Windows C/C++ 代码中的特定参数执行外部程序

c - 是否有类似 x86 cpuid() 的东西可用于 PowerPC?

c++ - new什么时候分配内存?

c++ - 是否存在不在其分配中存储元数据的自定义内存分配器设计模式?

c++ - 您如何声明和使用重载的池运算符删除?