c++ - 如何在不使指向它的指针失效的情况下增加缓冲区?

标签 c++ pointers memory-management invalidation memory-pool

术语“池”和“缓冲区”在这里可以互换使用。
假设我有一个池,我想在程序开始时分配,而不是总是调用 new
现在,我不想人为地限制池的大小,但如果我重新分配一个更大的池,所有指向旧池的指针都将失效,这当然不是很酷。


我想到的一种方法是“分页”,又名

const int NUM_PAGES = 5;
char* pool[NUM_PAGES];

并分配一个新页面而不是只重新分配一个页面。这将使所有指针保持有效,但会使分页池的管理更加困难。另外,我限制了自己的页面数量,所以最后还是要限制池的大小。


另一种方法是从我的分配函数返回的指针映射到指向实际内存空间的指针。这将使所有旧指针保持有效,但会占用更多内存,并且我需要编写一个智能指针以从执行映射的分配函数返回。


还有哪些其他可能的方法可以实现我想要的?我在上面的示例实现中错过了哪些(缺点)优势?

最佳答案

你说的东西让我想起了 std::deque。我不太确定您是否可以按原样使用 std::deque,或者您是否只需要使用其基本设计来实现某种分配器。

关于c++ - 如何在不使指向它的指针失效的情况下增加缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5800280/

相关文章:

c++ - 成员函数错误

c++ - 如何在 C++ 中使用 "%"运算符?

java 1.6 32 位最小和最大堆内存问题

iphone - 使用quartz 为 CALayer 绘制内容时发生严重崩溃

没有模板参数的 C++ 模板?

c++ - 条件运算符会导致代码效率降低吗?

c - int (*ptr)[4] 的真正含义是什么,它与 *ptr 有何不同?

C访问冲突写入位置scanf_s

c - 使用 strcpy 和等同字符串地址有什么区别?

c - 如果将已分配的内存块分割成更小的 block ,我还需要担心内存对齐吗?