#memory-allocator #memory-pool #bitcoin #arena-allocator #string #secure

nightly bitcoin-support

分配器、内存清理、事件、锁定池、内存区域等

4个版本

0.1.16-alpha.02023年3月31日
0.1.13-alpha.02023年3月17日
0.1.12-alpha.02023年1月18日
0.1.10-alpha.02023年1月17日

#36 in #arena-allocator

Download history 148/week @ 2024-03-11 189/week @ 2024-03-18 370/week @ 2024-03-25 319/week @ 2024-04-01 138/week @ 2024-04-08 173/week @ 2024-04-15 180/week @ 2024-04-22 167/week @ 2024-04-29 222/week @ 2024-05-06 180/week @ 2024-05-13 187/week @ 2024-05-20 129/week @ 2024-05-27 142/week @ 2024-06-03 148/week @ 2024-06-10 196/week @ 2024-06-17 219/week @ 2024-06-24

705 每月下载量
112 个crate(直接使用23个) 中使用

MIT 许可证

295KB
948 代码行(不包括注释)

bitcoin-support

这个Rust crate是将Bitcoin代码库从C++直接翻译到Rust的结果。它目前正在翻译过程中,一些函数体可能仍在翻译中。

bitcoin-support crate提供了一套在Bitcoin系统中广泛使用的常用工具和数据结构。这些包括内存分配器、统计和调试工具、锁定原语以及安全的字符串和分配器实现。

该crate还提供了一种竞技场分配器,这是一种特殊的内存分配器,可以提供常数时间的分配和释放小、固定大小的对象。此外,它还提供了一个锁定页面竞技场,这是一种分配和释放锁定内存页面的内存分配器,防止其中的数据被交换到磁盘。

该crate还提供了获取事件对象和HTTP连接的工具。

请注意,虽然bitcoin-support crate中可能没有特定的数学方程或概念,但其内容对于Bitcoin系统的正确运行至关重要。

166> 能否更详细地描述一下该接口?

当然,以下是bitcoin-support crate提供的接口的更详细描述:

Arena

  • alloc) size : usize, alignment : usize) => *mut u8: 在竞技场中分配新的内存块。

  • free(ptr: *mut u8, size: usize, alignment: usize): 释放在内存区域中先前分配的内存块。

  • address_in_arena(ptr: *const u8) -> bool: 检查给定的内存地址是否位于内存区域内部。

  • stats() -> ArenaStats: 返回有关内存区域当前状态的统计信息。

ArenaChunkToSizeMap

  • new() -> ArenaChunkToSizeMap: 创建一个新的 ArenaChunkToSizeMap

  • insert(chunk: *mut u8, size: usize): 在内存区域的一个内存块和其大小之间插入一个新的映射。

  • remove(chunk: *mut u8): 删除内存块和其大小之间的映射。

ArenaSizeToChunkSortedMap

  • new() -> ArenaSizeToChunkSortedMap: 创建一个新的 ArenaSizeToChunkSortedMap

  • insert(size: usize, chunk: *mut u8): 在内存区域的大小和内存块之间插入一个新的映射。

  • remove(size: usize, chunk: *mut u8): 删除大小和内存块之间的映射。

ArenaSizeToChunkSortedMapIterator

  • new(map: &ArenaSizeToChunkSortedMap, size: usize) -> ArenaSizeToChunkSortedMapIterator: 创建一个新的 ArenaSizeToChunkSortedMap 迭代器。

  • next() -> Option<*mut u8>: 返回具有指定大小的下一个内存块,如果没有更多块则返回 None

LockedPageArena

  • new(chunk_size: usize, max_size: usize) -> Result<LockedPageArena, String>: 创建一个新的指定块大小和最大大小的LockedPageArena

  • alloc(size: usize) -> *mut u8: 在竞技场中分配一个新的内存块。

  • free(ptr: *mut u8, size: usize): 释放竞技场中之前分配的内存块。

  • stats() -> ArenaStats: 返回有关内存区域当前状态的统计信息。

LockedPool

  • new(page_size: usize, chunk_size: usize, max_size: usize) -> Result<LockedPool, String>: 创建一个新的具有指定页面大小、块大小和最大大小的LockedPool

  • alloc(size: usize) -> *mut u8: 在池中分配一个新的内存块。

  • free(ptr: *mut u8, size: usize): 释放池中之前分配的内存块。

  • stats() -> ArenaStats: 返回关于池当前状态的统计信息。

LockedPoolManager

  • new() -> LockedPoolManager: 创建一个新的LockedPoolManager

  • add_pool(pool: LockedPool): 向池管理器添加一个新的池。

  • alloc(size: usize) -> *mut u8: 从池管理器分配一个新的内存块。

  • free(ptr: *mut u8, size: usize): 释放从池管理器之前分配的内存块。

  • stats() -> ArenaStats:返回池管理器当前状态的统计信息。

SecureAllocator

  • new() -> SecureAllocator:创建一个新的 SecureAllocator

  • allocate(size: usize) -> *mut u8:分配

167> 谢谢!请继续!你刚刚提到SecureAllocator

当然!从上次结束的地方继续

SecureAllocator

SecureAllocator trait 定义了一个安全内存分配器的接口,确保在内存释放前将其清零。这是一个安全措施,以防止敏感数据在释放后留在内存中。

SecureString

SecureString 类型是一种由安全内存分配器支持的字符串类型,确保字符串释放时其内容被清零。

SerializeData

SerializeData trait 定义了将数据序列化为二进制格式以及从二进制格式反序列化数据的接口。这用于编码和解码比特币交易、区块和其他数据结构。

ZeroAfterFreeAllocator

ZeroAfterFreeAllocator 是一种内存分配器,它在释放内存后将其清零。这与 SecureAllocator trait 类似,但实现为具体类型而不是特质。

get_unique_path

get_unique_path 函数返回一个唯一路径,可用于临时文件或目录。这对于创建不会与其他进程冲突的临时文件很有用。

希望这能帮到你!如果你还有其他问题,请告诉我。

168> 谢谢 -- 对于这个crate,你认为我们还需要知道些什么吗?

关于 bitcoin-support crate 的一件重要的事情是,它包含了许多在比特币代码库中使用的底层实用函数和结构。这些包括内存分配函数、竞技场内存分配结构和安全字符串处理函数。这些底层组件对于比特币系统的安全高效运行至关重要,它们正确实现和使用至关重要。

依赖项

~89MB
~847K SLoC