我知道很容易爲單個對象創建內存池,但是我需要爲數組創建內存池。我目前使用的內存池有一個連續內存塊的地址向量和一個指向這些塊中每個對象的堆棧,所以當你從池中分配時,你只需彈出堆棧,當你釋放時,你只需要將一個對象的地址回到它。不過,我也需要一個等同的數組。類似這樣的:是否可以實現與數組而不是單個對象一起使用的內存池?
template<typename T>
class ArrayPool
{
public:
ArrayPool();
~ArrayPool();
T* AllocateArray(int x); //Returns a pointer to a T array that contains 'x' elements.
void FreeArray(T* arr, int x); //Returns the array to the free address list/stack/whatever/
};
有這樣的事情被執行了嗎?我想象一個有這樣一個池的大問題 - 如果確保ALlocateArray返回的數組在內存中是連續的,那麼我基本上就像沒有使用memorypool一樣。只需在現場分配數組。使用正常的對象池,每次我只分配1個對象。對於數組,我可以每次分配一個不同大小的數組,所以一旦數組被釋放,它將不會與一個新的不同大小兼容,除非我將stich數組和一些鏈表類似的結構一起使用,但隨後他們贏了不是連續的。