百合文库
首页 > 网文

LevelDB(1):内存的申请与释放(arena.cc)

2024-06-14 来源:百合文库

LevelDB(1):内存的申请与释放(arena.cc)


arena.cc与arena.h文件用于LevelDB的非持久化数据结构的内存申请与释放。
blocks_数组用于存储LevelDB申请的内存块的空间。

LevelDB(1):内存的申请与释放(arena.cc)


memory_usage_表示当前总的使用内存大小。
alloc_bytes_remaining_表示当前内存块还有多少字节。
alloc_ptr_表示当前内存块的指针位置。

LevelDB(1):内存的申请与释放(arena.cc)


构造函数与析构函数。
构造函数触发时,当前的内存块的空间为0,并且内存块无任何数据,所以指针为nullptr。
析构函数触发时,要将数组中的所有数据进行释放,防止野指针与内存泄漏。

LevelDB(1):内存的申请与释放(arena.cc)


申请空间函数,直接new一个指针然后返回,并且将这个指针的起始位置存到blocks_数组中。
Allocate是申请函数,首先判断剩余的字节数是否足够,如果足够直接 ,不够就需要申请一个新的块(调用AllocateFallback)

LevelDB(1):内存的申请与释放(arena.cc)


AllocateFallback函数先比较一下申请字节数,如果申请字节数>kBlockSize/4,那么就申请bytes个字节的空间,否则就申请kBlockSize的字节空间,其中kBlockSize是自定义的字节数,默认为4096。

LevelDB(1):内存的申请与释放(arena.cc)


猜你喜欢