术语“池”和“缓冲区”在这里可以互换使用。
假设我有一个池,我想在程序开始时分配,而不是总是调用 new
。
现在,我不想人为地限制池的大小,但如果我重新分配一个更大的池,所有指向旧池的指针都将失效,这当然不是很酷。
我想到的一种方法是“分页”,又名
const int NUM_PAGES = 5;
char* pool[NUM_PAGES];
并分配一个新页面而不是只重新分配一个页面。这将使所有指针保持有效,但会使分页池的管理更加困难。另外,我限制了自己的页面数量,所以最后还是要限制池的大小。
另一种方法是从我的分配函数返回的指针映射到指向实际内存空间的指针。这将使所有旧指针保持有效,但会占用更多内存,并且我需要编写一个智能指针以从执行映射的分配函数返回。
还有哪些其他可能的方法可以实现我想要的?我在上面的示例实现中错过了哪些(缺点)优势?
最佳答案
你说的东西让我想起了 std::deque
。我不太确定您是否可以按原样使用 std::deque
,或者您是否只需要使用其基本设计来实现某种分配器。
关于c++ - 如何在不使指向它的指针失效的情况下增加缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5800280/