【C++内存管理】GCC4.9 array_allocator 源码分析

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 只会随着内存分配的增加而不断增加,内存数组中之前使用过的内存即使被回收之后,也不能再使用。

感觉也没做啥内存管理的动作。就是分配一大块数组,要的时候就从数组中拿就好了。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章