【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 只會隨着內存分配的增加而不斷增加,內存數組中之前使用過的內存即使被回收之後,也不能再使用。

感覺也沒做啥內存管理的動作。就是分配一大塊數組,要的時候就從數組中拿就好了。。。

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