【lesson7】高并发内存池Thread Cache层释放内存的实现

文章目录

  • Thread Cache层释放内存的流程
  • Thread Cache层释放内存的实现

Thread Cache层释放内存的流程

  1. 当释放内存小于256k时将内存释放回thread cache,计算size映射自由链表桶位置i,将对象Push到_freeLists[i]
  2. 当链表的长度过长,则回收一部分内存对象到central cache

Thread Cache层释放内存的实现

之前我们只实现了一部分现在就全部实现。

void ThreadCache::Deallocate(void* ptr, size_t size)
{
	assert(ptr);
	//进来内存的大小一定不能大于最大的字节数(256K)
	assert(size <= MAX_BYTES);

	// 找对映射的自由链表桶,对象插入进入
	size_t index = SizeClass::Index(size);
	_freeLists[index].Push(ptr);

	// 当链表长度大于一次批量申请的内存时就开始还一段list给central cache
	if (_freeLists[index].Size() >= _freeLists[index].MaxSize())
	{
		ListTooLong(_freeLists[index], size);
	}
}

void ThreadCache::ListTooLong(FreeList& list, size_t size)
{
	//使用输出型参数,带出这段要删除的节点链表
	void* start = nullptr;
	void* end = nullptr;
	list.PopRange(start, end, list.MaxSize());
	
	//然后将回收的对象交给CentralCache层处理。
	CentralCache::GetInstance()->ReleaseListToSpans(start, size);
}

你可能感兴趣的:(项目高并发内存池,C++,高并发内存池,C)