#fallible #stable #allocation #std

fallible_alloc

可出错rust稳定std集合分配

2个不稳定版本

0.2.0 2021年7月20日
0.1.0 2021年7月16日

#451 in 内存管理

MIT许可证

41KB
138

可出错rust稳定std集合分配

failable_alloc codecov Hits-of-Code

目前我们在std中有一个不稳定的分配API,因此这是稳定rust的一个临时安全解决方案。

使用示例

要创建一个向量,您可以使用以下代码示例

use fallible_alloc::vec::alloc_with_size;

...

let vector_size: usize = 10;
let maybe_vector = alloc_with_size::<f64>(vector_size);

match maybe_vector {
  Ok(vec) => println!("Created a vec with size 10"),
  Err(error) => println!("Failed to create a vec, reason: {}", error)
}

如您所见,maybe_vector有一个Result<Vec<T>, AllocError> 类型,因此现在可以处理一部分分配错误。

还可以使用以下代码示例更改crate使用的分配器

use std::alloc::{GlobalAlloc, System, Layout};

struct MyAllocator;

unsafe impl GlobalAlloc for MyAllocator {
    unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
        System.alloc(layout)
    }

    unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
        System.dealloc(ptr, layout)
    }
}

#[global_allocator]
static GLOBAL: MyAllocator = MyAllocator;

无运行时依赖项