非专业levelDB源码解析2:slice

本文介绍了LevelDB中Slice类的设计原理及其使用注意事项。Slice作为字符串的封装,通过指针引用外部存储的数据,不进行内存分配。文章强调了Slice的有效期依赖于外部存储,并详细解析了remove_prefix()等实用函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Slice 是在字符串类型上的简单封装。从其成员变量中可以看出,它其实只是一个指针类型,内部并不分配空间。

LevelDB的说明中指出,Slice的有效期是依赖于外部存储的。

// The user of a Slice must ensure that the slice

// is not used after the corresponding external storage hasbeen deallocated.


从声明中看到,Slice有两个private的变量data_和size_来标示实际的存储内容和大小,data_指向真正的数据地址。

Slice重载的构造函数表明Slice同时支持字符串和string的类型。一个值得注意的点是Slice是支持包含’\0’的。

// In addition, leveldbmethods do not return null-terminated C-style strings since leveldb keysand values are allowed to contain '\0' bytes.

 

另一个有意思的函数是remove_prefix()。 Slice只需简单的修改两个变量的数值就可以数据内容,使用起来非常方便。

// Drop the first "n" bytes from this slice.
  voidremove_prefix(size_t n) {
    assert(n <=size());
    data_ += n;
    size_ -= n;
  }
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值