当前位置: 首页 > news >正文

跟着源码实现LevelDB(二)util/status.cc

概述

本小节实现了leveld的Status类,Status看起来是个简单的类,但是其中也包含了leveldb对极致的性能实现的巧妙设计

Status的内存管理

Status 只有一个成员变量 const char* state_; state[0…3] 表示长度,state[4] 1个字节 表示状态的枚举, state[5…] 表示状态的含义

// OK status has a null state_.  Otherwise, state_ is a new[] array
  // of the following form:
  //    state_[0..3] == length of message
  //    state_[4]    == code
  //    state_[5..]  == message
  const char* state_;

通义灵码的解释是

简化设计:通过一个指针管理所有状态信息,减少了类的复杂性。state_ 为 nullptr 表示成功状态(OK),否则指向一个动态分配的数组。
紧凑存储:将长度信息、状态码和消息合并存储在一个连续的内存块中,避免了多个独立成员变量带来的额外开销和内存碎片。
高效复制和移动:在复制或移动构造函数中,只需要处理一个指针,确保资源正确转移或复制,提高了性

从CopyState可以看到,先取state_的长度,再进行拷贝,+5是因为 4字节存长度,1字节存状态

const char *Status::CopyState(const char * state)
{
    if(state == nullptr) {
        return nullptr;
    }
    uint32_t size;
    std::memcpy(&size, state, sizeof(size));
    char * result = new char[size + 5];
    std::memcpy(result, state, size + 5);
    return result;
}

使用Swap实现移动构造函数

我可能看的代码太少了,这种swap方式实现移动语义的奇技淫巧我是大为震惊, 不需要判断rhs是不是自己。

inline Status& Status::operator=(Status&& rhs) noexcept {
    std::swap(state_, rhs.state_);
    return *this;
}

单元测试

本节没有新加单元测试,跑通原来的测试即可
./leveldb_tests --gtest_filter="*Status*"

在这里插入图片描述

代码地址

https://github.com/9DemonFox/myleveldb/commit/0b184a279e4d92bb3e5ae35b2921c8b10c29848f

相关文章:

  • 独立开发增长黑客教程
  • 让deepseek更专业的提示词教程
  • CSS Selectors
  • Canvas修仙传·第三重天金丹境(上集) ——九转游戏开发心法之《灵蛇奇谭》
  • Netty是怎么实现Java NIO多路复用的?(源码)
  • 【愚公系列】《Python网络爬虫从入门到精通》037-文件的存取
  • 微软具身智能感知交互多面手!Magma:基于基础模型的多模态AI智能体
  • 初识SQL
  • 在 macOS 使用 .pem 私钥免密登录腾讯云服务器
  • java高级(IO流多线程)
  • 【愚公系列】《Python网络爬虫从入门到精通》036-DataFrame日期数据处理
  • GPT-4.5实际性能评测:实际探索
  • 3475相或为k
  • 1-PostgreSQL 简介
  • huggingface下载模型到本地缓存环境变量配置详解
  • 《每天读一个JDK源码》之HashMap解读
  • Python线程池知多少
  • 【Qt】ffmpeg照片提取、视频播放▲
  • 【Java 基础(人话版)】Java SE vs Java EE
  • 请解释 Node.js 中的网络模块(http、https),如何创建 HTTP服务器?
  • 菠菜网站怎么做排名/永久免费不收费的污染app
  • 中国建设手机银行网站/广州网站优化外包
  • 网站引导页flash/如何进行搜索引擎营销
  • 泰安网站制作电话/兰州模板网站seo价格
  • 百度做网站的服务合同/常见的网络营销策略都有哪些
  • 网站技术部做什么/青岛的seo服务公司