1 个不稳定版本
0.1.0 | 2023年9月5日 |
---|
#450 在 内存管理 中
11KB
190 行
hugepage-rs
hugepage-rs是Linux大页的封装分配器。
用法
大页分配器
大页分配器提供了两种操作接口,hugepage_rs::alloc 和 hugepage_rs::dealloc,用于分配和释放大页内存。
hugepage_rs::alloc() 函数分配指定大小的字节并返回分配内存的指针。内存不会被初始化。如果分配失败则返回 std::ptr::null_mut(),否则返回指针。
use hugepage_rs;
use std::alloc::Layout;
use std::{mem, ptr};
fn main() {
let layout = Layout::array::<char>(2048).unwrap();
let dst = hugepage_rs::alloc(layout);
let src = String::from("hello");
let len = src.len();
unsafe {
ptr::copy_nonoverlapping(src.as_ptr(), dst, len);
let s = String::from_raw_parts(dst, len, len);
assert_eq!(s, src);
mem::forget(s);
}
hugepage_rs::dealloc(dst, layout);
}
大页封装
简单的封装实现,拥有所有权,数据位于大页分配的内存上,超出作用域后直接释放,使用大页分配器作为内存分配器。
use hugepage_rs;
fn main() {
let mut v = hugepage_rs::Box::new(5);
*v += 42;
assert_eq!(*v, 47);
}
注意
- 系统需要启用大页。
参考
https://linuxkernel.org.cn/doc/Documentation/vm/hugetlbpage.txt
依赖
~52KB