【发布时间】:2011-02-26 13:38:53
【问题描述】:
假设我需要经常在堆上分配和删除对象(任意大小),如果我不删除这些对象,而是将其返回到某个“池”以供以后重用,是否有任何性能优势?
它会通过减少堆分配/释放来带来好处吗?还是会比内存分配器性能更慢,因为“池”需要管理指针的动态集合。
我的用例:假设我创建了一个基于链表的队列容器,并且该链表的每个节点都分配在堆上,因此每次调用 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() 到队列,这将是两倍的过程,是否明智?
标签: c++ memory-management queue allocation recycle