这里的“pool”和“buffer”可以互换使用。
假设我想在程序开始时分配一个池,以便不必一直调用new
。
现在,我不想人为地限制池的大小,但如果我重新分配更大的池,所有指向旧池的指针都将失效,这肯定不太好。
我想到的一种方法是“分页”,也就是
const int NUM_PAGES = 5;
char* pool[NUM_PAGES];
而不是只重新分配一个页面,分配一个新页面。这将使所有指针保持有效,但使页面池的管理变得更加困难。此外,我限制了页面数量,因此最终又限制了池的大小。
另一种方法是从我的分配函数返回的指针到实际内存空间的指针进行映射。这将使所有旧指针保持有效,但会占用更多的内存,并且我需要编写一个智能指针来从我的分配函数中返回进行映射。
还有哪些其他可能的方法可以实现我想要的目标?在上面的示例实现中,我错过了什么(不)优点?
vector
(或者deque
)中存储实际页面指针如何呢?我不太明白为什么需要一个链表(通常更难维护),而且页面指针的重新分配实际上不应该成为问题,因为用户代码拥有的指针指向的是页面内容,而不是指针。 - David Rodríguez - dribeas