1 个不稳定版本
0.1.0 | 2019年1月31日 |
---|
#7 in #globalalloc
62 每月下载
用于rust_hero
8KB
83 行
Rust Bump分配器
此Rust包添加了一个全局分配器实现,用于bump分配器。bump分配器是一种只使用单个底层内存区域来处理所有分配请求的分配器,任何新的内存请求都源自先前分配的指针地址的“bump”。bump分配器的一个关键观察结果是,任何尝试free
(或Rust术语中的dealloc
)内存的操作都是无操作——即所有内存分配实际上都会泄漏。
我们通过使用单个mmap
或VirtualAlloc
调用来服务此bump分配器,该调用请求足够大的区域以处理bump分配器的所有应用。
如何使用
只需像这样包含包:
extern crate bump_alloc;
#[global_allocator]
static A : BumpAlloc = BumpAlloc::new();
它将使用bump分配器重新映射所有Rust分配。
默认情况下,我们使用Unix系统上的mmap或Windows系统上的VirtualAlloc保留一个千兆字节的内存。如果您需要在您的应用程序中使用更多内存,您可以使用with_size
方法,指定您想要bump分配器保留的字节数
extern crate bump_alloc;
#[global_allocator]
static A : BumpAlloc = BumpAlloc::with_size(1024 * 1024 * 4);
此示例将分配四兆字节的内存用于bump分配器。
对于初学者来说,mmap和VirtualAlloc并不只是预先分配请求的内存量——它们只是在操作系统中打下基础,以便我们可以分配这么多内存。因此,保留了一千兆字节内存但只使用了单个兆字节的应用程序,实际上只使用了单个兆字节的RAM。
使用位置
如果您有短暂运行的应用程序,或者不太使用分配的应用程序,bump分配器可以作为使用更多内存但实现更快的可执行文件的有用折衷方案。bump分配器的实现使得执行分配是一个极其简单的操作,这为实际的有用工作留下了更多的CPU周期。
如果您有一个执行大量分配的长运行应用程序,这个bump分配器不是您要找的分配器。在这些场景中,内存耗尽是可能的,请小心!
许可证
本代码遵循CC0 1.0 Universal许可协议,这是一种允许的公共领域许可。
依赖项
~1–270KB