术语“池”和“缓冲区”在这里可以互换使用。
假设我有一个我想在程序开始时分配的池,而不是一直调用new
。
现在,我不想人为地限制自己池的大小,但是如果我重新分配一个更大的池,所有指向旧池的指针都会失效,这当然不是很酷。
我想到的一种方法是“分页”,又名
const int NUM_PAGES = 5;
char* pool[NUM_PAGES];
并分配一个新页面,而不是只重新分配一个页面。这将使所有指针保持有效,但会使分页池的管理更加困难。另外,我限制自己的页数,所以最后再次限制池的大小。
另一种方法是从我的分配函数返回的指针映射到指向实际内存空间的指针。这将使所有旧指针保持有效,但会占用更多内存,并且我需要编写一个智能指针以从执行映射的分配函数返回。
还有哪些其他可能的方法来实现我想要的?在上面的示例实现中,我错过了哪些(不利)优势?