![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leveldb
文章平均质量分 72
馒头2870
这个作者很懒,什么都没留下…
展开
-
【leveldb】basename/dirname中的坑
最近阅读leveldb中代码的时候发现,leveldb自己实现了basename和dirname的功能,并没有使用glibc自带的函数,觉得比较奇怪,去查文档然后动手实践后发现原来这里面有个一不小心就会踩到的坑。 man手册中提到,posix版本的glibc实现会改变basename/dirname的参数,而且在使用静态字符串如/usr/调用时会引起段错误。 自己调试发现,dirname会改变参数,并将最后一个/改成\0,如下 执行到dirname时,原来的这个字符串p就已经被改变了,并且导致strlen原创 2021-01-19 20:45:44 · 296 阅读 · 0 评论 -
【leveldb】从EncodeFixed64来看汇编层面的性能优化
前言 最近在读leveldb的代码,看到了EncodeFixed64的写法感觉很不解,为什么要写的这么繁琐晦涩,把整数存在一个char数组中不是一句sprintf就解决了吗?深挖之后,还真不是这么简单 从git提交记录查起 从github上看关于这个函数最近的一个提交,Remove leveldb::port::kLittleEndian。 提交内容中写道:Clang 10包含了以下描述的优化https://bugs.llvm.org/show_bug.cgi?id=41761。 这意味着 {D原创 2021-01-16 16:39:07 · 458 阅读 · 1 评论 -
【leveldb】varint 讲解和实现
前言 leveldb中为了减少内存占用,使用了varint这一数据结构,把数字放到字符数组中来表示,思想就是把小数字用尽量少的字节来表示,每个字节只使用其中的7位,最高位用来表示是否还有剩余的数字,0代表没有,1代表有。 encode 代码 下面是encode的代码 #include <stdio.h> #include <inttypes.h> #include <string> char *encode_varint32(char *dst, uint32_t原创 2021-01-08 00:52:06 · 435 阅读 · 0 评论