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
只会随着内存分配的增加而不断增加,内存数组中之前使用过的内存即使被回收之后,也不能再使用。
感觉也没做啥内存管理的动作。就是分配一大块数组,要的时候就从数组中拿就好了。。。