假设我需要经常在堆上分配和删除对象(任意大小),如果不是删除这些对象,我会将其返回到某个“池”以供以后重用,是否有任何性能优势?
它会通过减少堆分配/释放来带来好处吗?还是会比内存分配器性能更慢,因为“池”需要管理指针的动态集合。
我的用例:假设我创建了一个基于链表的队列容器,并且该列表的每个节点都分配在堆上,因此每次调用 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;
}
}
`