假设我需要经常(任意大小)分配和删除堆上的对象,如果不是删除这些对象,而是将它返回给某个“池”以便稍后重用,是否有任何性能优势?回收释放对象
它会减少堆分配/释放吗?或者它会比内存分配器性能更慢,因为“池”需要管理动态指针集合。我的用例:假设我创建了一个基于链表的队列容器,并且该表中的每个节点都分配在堆上,所以每次调用push()和pop()将分配和释放该节点:
`
template <typename T> struct QueueNode {
QueueNode<T>* next;
T object;
}
template <typename T> class Queue {
void push(T object) {
QueueNode<T>* newNode = QueueNodePool<T>::get(); //get recycled node
if(!newNode) {
newNode = new QueueNode<T>(object);
}
// push newNode routine here..
}
T pop() {
//pop routine here...
QueueNodePool<T>::store(unusedNode); //recycle node
return unusedNode->object;
}
}
`
我的另一个问题是想我需要使用队列或列表,然后每次来管理回收点你调用push(),你实际上在池中做了pop(),并且push()来排队,这将会是更长的两倍,是明智的吗? – uray 2010-06-01 21:48:23