回收释放的对象

ura*_*ray 4 c++ queue memory-management allocation recycle

假设我需要经常在堆上分配和删除对象(任意大小),如果不是删除这些对象,而是将它返回到某个“池”以供以后重用,是否有任何性能优势?

它会通过减少堆分配/解除分配带来好处吗?或者与内存分配器性能相比它会更慢,因为“池”需要管理指针的动态集合。

我的用例:假设我基于链表创建了一个队列容器,并且该列表的每个节点都分配在堆上,因此每次调用 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

`

Uri*_*Uri 5

池化是一种非常常见的技术,可以避免频繁的分配和解除分配。有些人把它当作一种设计模式。通常有现有的实现,因此重新发明轮子没有任何好处。

您可能想看看问题对象池与动态分配