array_allocator
直接就是用 std::array
來做的內存管理。先分配一大塊數組,然後客戶需要多少內存,就直接從數組中拿去,實現較爲簡單
先看看它的數據成員:
array_type* _M_array;
size_type _M_used;
array_type
就是std::array
類型,也就是_M_array
可以看作是一個指向數組的指針。- _M_used 就是標定數組中有多少內存塊是分配出去了的。
allocator 函數源碼:
pointer
allocate(size_type __n, const void* = 0)
{
if (_M_array == 0 || _M_used + __n > _M_array->size())
std::__throw_bad_alloc();
pointer __ret = _M_array->begin() + _M_used;
_M_used += __n;
return __ret;
}
};
- 客戶需要多少,就直接從數組中取出多少內存塊,並且修改相應的
_M_used
記錄。
deallocator 源碼:
void deallocate(pointer, size_type)
{
// Does nothing.
}
- deallocator 啥也沒做。這也就意味着,
_M_used
只會隨着內存分配的增加而不斷增加,內存數組中之前使用過的內存即使被回收之後,也不能再使用。
感覺也沒做啥內存管理的動作。就是分配一大塊數組,要的時候就從數組中拿就好了。。。