iobuf:
block:
197 struct IOBuf::Block {
198 butil::atomic<int> nshared;
199 uint16_t flags;
200 uint16_t abi_check; // original cap, never be zero.
201 uint32_t size;
202 uint32_t cap;
203 Block* portal_next; //常规不触发,某些场景使用
207 char* data;
一个共享块,分配block后,持有之,这是一块大内存,头部是block元数据,后面是data,目前感觉data指针多余;通过nshared共享,该值内存顺序是memory_order_relaxed,只保证当前操作的原子性,不考虑线程间的同步,其他线程可能读到新值,也可能读到旧值。
构造iobuf,magic默认0,因此默认使用bigview:
86 struct BigView {
87 int32_t magic;
88 uint32_t start;//ref头
89 BlockRef* refs;
90 uint32_t nref;//ref个数
91 uint32_t cap_mask;
92 size_t nbytes;//总字节数
};
74 struct BlockRef {
75 // NOTICE: first bit of `offset' is shared with BigView::start
76 uint32_t offset;
77

最低0.47元/天 解锁文章
664

被折叠的 条评论
为什么被折叠?



