假設我需要經常(任意大小)分配和刪除堆上的對象,如果不是刪除這些對象,而是將它返回給某個「池」以便稍後重用,是否有任何性能優勢?回收釋放對象
它會減少堆分配/釋放嗎?或者它會比內存分配器性能更慢,因爲「池」需要管理動態指針集合。我的用例:假設我創建了一個基於鏈表的隊列容器,並且該表中的每個節點都分配在堆上,所以每次調用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