如图,总体buffer可分为3部分:
size
:记录
data
块的字节个数,从0开始编号(size = 0代表data块为空而不是buffer为空),不包括前面的
size
与
pos
(
size
+
pos
统称
header)。
根据size的大小(也就是data块的字节数)可将buffer分为大块与小块,其中size >= 0x8000 为大块,否则为小块。
(这里有个问题:大小块size都是一个范围,我们要怎么快速来确定buffer是大块还是小块呢?这个问题答案我们放到后面再细说)
pos
:记录
data
块的读写指针,也是从0开始编号(这里
pos
既记录读又记录写操作的位置,本身是1个指针,
存不了两条信息,所以我们需要自己手动调整
pos
)
data
:存储buffer里面的实际数据,可以是
int,ulong,str
等多种类型
cornerstone中RAFT的buffer的实现
未经允许不得转载:小狮博客 » cornerstone中RAFT的buffer的实现