Buffer数据结构

muduo中的Buffer为封装了的vector。vector为一块连续空间,且其本身具有自动增长的性质,它的迭代器为原始指针,使用起来较为方便。 vector另外Buffer有两个data member,指向该vector中的两个元素,这两个index为int类型。
为什么这两个index为int类型?
vector自带自动扩增功能,要是index为指针的话,扩增之后指针会失效,而int类型不会发生变化
readindex和writeindex把vector分成了三个部分:prependable、readable、writable
这里写图片描述
各个空间大小计算公式为:
prependable = readIndex
readable = writeIndex - readIndex
writable = size() - writeIndex
Muduo Buffer 里有两个常数 kCheapPrepend ( kCheapPrepend 为8)和 kInitialSize(1024),定义了 prependable 的初始大小和 writable 的初始大小。(readable 的初始大小为 0。)

class Buffer : public muduo::copyable
{
public:
static const size_t kCheapPrepend = 8;//前面预留空间大小
static const size_t kInitialSize = 1024;//初始化存储数据空间

explicit Buffer(size_t initialSize = kInitialSize)
: buffer_(kCheapPrepend + initialSize),//初始化Buffer总大小
readerIndex_(kCheapPrepend),
writerIndex_(kCheapPrepend)
{
assert(readableBytes() == 0);
assert(writableBytes() == initialSize);
assert(prependableBytes() == kCheapPrepend);
}
}
如果向Buffer写入了200字节,那么布局如图1,writeIndex 向后移动了 200 字节,readIndex 保持不变,readable 和 writable 的值也有变化。
这里写图片描述
—————————————————- 图1—————————————
如果有又从 Buffer read() & retrieve() (下称“读入”)了 50 字节,结果见图 2这里写图片描述。与上图相比,readIndex 向后移动 50 字节,writeIndex 保持不变,readable 和 writable 的值也有变化(这句话往后从略)。
—————————————————- 图2—————————————
当再次向Buffer写入数据的时候,大小超过writable的大小,vector会增长

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值