博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tars源码漫谈第23篇------tc_buffer_pool.h/tc_buffer_pool.cpp(内存池操作)
阅读量:4141 次
发布时间:2019-05-25

本文共 1164 字,大约阅读时间需要 3 分钟。

      tc_buffer_pool中的TC_Slice是一个内存类, TC_BufferPool是一个内存池类。

      涉及到的都是内存的操作, 申请, 释放等。 封装后, 便于统一使用。

      看了一下, 有些地方有点绕, 但不难理解, 不需要多说。 来随便看几个函数:

TC_Slice TC_BufferPool::Allocate(size_t size){    TC_Slice s;    size = RoundUp2Power(size);    if (size == 0)        return s;    if (size < _minBlock || size > _maxBlock)     {        // 不归pool管理,直接new        s.data = new char[size];        s.len = size;    }    else    {        // 定位到具体的buffer链表        BufferList& blist = _GetBufferList(size);         s = _Allocate(size, blist);    }    return s;}void TC_BufferPool::Deallocate(TC_Slice s){    if (s.len < _minBlock || s.len > _maxBlock)     {        // 不归pool管理,直接delete        delete[] reinterpret_cast
(s.data); } else if (_totalBytes >= _maxBytes) { // 占用内存过多,就不还给pool delete[] reinterpret_cast
(s.data); } else { // 还给pool BufferList& blist = _GetBufferList(s.len); blist.push_back(s.data); _totalBytes += s.len; }}void TC_BufferPool::SetMaxBytes(size_t bytes){ _maxBytes = bytes;}size_t TC_BufferPool::GetMaxBytes() const{ return _maxBytes;}
       内存池的主要目的, 还是为了提高效率。 后面我们要介绍的线程池, 也是类似道理。

转载地址:http://qgwti.baihongyu.com/

你可能感兴趣的文章
springmvc传值
查看>>
在Eclipse中查看Android源码
查看>>
Android使用webservice客户端实例
查看>>
[转]C语言printf
查看>>
C 语言 学习---获取文本框内容及字符串拼接
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
一篇搞懂Java反射机制
查看>>
Single Number II --出现一次的数(重)
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
idea的安装以及简单使用
查看>>