【leveldb】arena内存结构

本文详细探讨了leveldb中的arena内存管理机制,包括数据结构、内存分配策略以及为什么arena内存只能增长而不能释放。在数据结构部分,讲解了arena如何存储和跟踪内存块。内存分配部分阐述了如何通过Allocate方法有效地分配内存,避免浪费。arena的内存释放策略是在arena对象销毁时统一释放,确保内存的增长性。
摘要由CSDN通过智能技术生成

本文介绍arena内存管理的设计和实现。

arena是leveldb中一个非常简单的内存池,以下做详细介绍。

1 数据结构

arena数据结构如下,其中,blocks_保存着所有创建的block;blocks_memory_保存所有block申请的总空间;alloc_ptr_和alloc_bytes_remaining_分别是当前block的内存分配起始地址 和 可用空间大小。

  // Allocation state
  char* alloc_ptr_;
  size_t alloc_bytes_remaining_;

  // Array of new[] allocated memory blocks
  std::vector<char*> blocks_;

  // Bytes of memory in blocks allocated so far
  size_t blocks_memory_;

2 分配内存

inline char* Arena::Allocate(size_t bytes) {
  // The semantics of what to return are a bit messy if we allow
  // 0-byte allocations, so we disallow them here (we don't need
  // them for our internal use).
  assert(bytes > 0);
  if (bytes <= alloc_bytes_remaining_) {
    char* result = alloc_ptr_;
    alloc_ptr_ += bytes;
    alloc_bytes_remaining_ -= bytes;
    return result;
  }
  return Allocate
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值