3 个稳定版本
使用旧 Rust 2015
2.0.2 | 2024年6月26日 |
---|---|
1.0.0 |
|
0.5.2 |
|
0.4.1 |
|
0.1.8 |
|
413 在 Rust 模式 中
1,950 每月下载量
49KB
419 行代码(不含注释)
box_raw_ptr
box_raw_ptr 是一个 Rust 库,提供用于处理原始指针(*const T
和 *mut T
)的安全抽象。它确保适当的对齐、边界检查和安全的内存操作,同时受 Rust 安全原则的启发,允许与 C 风格的内存管理进行互操作。
特性
-
类型安全:包装器(
ConstRawPtr
和MutRawPtr
)确保安全使用原始指针(*const T
和*mut T
)。 -
边界检查:检查和调整分配内存内偏移量的方法。
-
对齐保证:确保指针按照
T
对齐。 -
内存管理:包括释放内存和安全管理空指针的方法。
-
互操作性:便于与由 C 函数或 Rust 的分配器分配的内存进行安全交互。
组件
-
ConstRawPtr:提供对
*const T
指针的安全操作,包括边界检查和内存释放。 -
MutRawPtr:提供对
*mut T
指针的安全操作,支持可变访问和内存管理。
使用方法
use box_raw_ptr::{const_raw_ptr::ConstRawPtr, mut_raw_ptr::MutRawPtr};
fn main() {
// Example: Import C pointer and write to the allocated data
#[link(name = "example", kind = "static")]
extern "C" {
fn c_ptr() -> *mut std::ffi::c_int;
}
let ptr: *mut i32 = unsafe { c_ptr() };
let safeptr = MutRawPtr::new(ptr, 1, 1);
safeptr.write_ptr(14).unwrap();
assert_eq!(safeptr.unwrap().unwrap(), 14)
// Example: Create a ConstRawPtr to safely handle a raw const pointer
// Allocate properly aligned memory for an i32
let alloc: *const i32 = unsafe {
std::alloc::alloc(std::alloc::Layout::from_size_align(20, 4).unwrap()) as *const i32
};
let mut ptr: ConstRawPtr<i32> = ConstRawPtr::new(alloc, 5, 1);
ptr.change_offset(4).unwrap();
println!("{} : {}", ptr.unwrap().unwrap(), ptr.memory_address());
// Example: Allocate data using c_malloc
let alloc: *const i32 = ConstRawPtr::c_malloc(1).unwrap();
let _: ConstRawPtr<i32> = ConstRawPtr::new(t, 1, 1);
}
安全注意事项
-
不安全上下文:使用原始指针本质上涉及不安全操作。
-
内存安全:确保指针的适当初始化和对齐。
-
释放指针:手动释放指针如果在之后使用可能导致未定义行为。
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
box_raw_ptr = "2.0.2"
文档
有关详细的 API 文档,请参阅 docs.rs。
许可
MIT 许可证
版权所有 (c) [2024] [Rocco Zinedine Samuel Jenson]
本授权协议授予任何人免费获取本软件及其相关文档文件(以下简称“软件”)的副本的权利,允许在不加限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、许可和/或销售软件的副本,并允许软件的接收者进行此类操作,但须遵守以下条件:
上述版权声明和本许可声明应包含在软件的所有副本或实质部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于对适销性、特定用途的适用性和非侵权的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论基于合同、侵权或其他原因,无论是由于软件本身、使用或以其他方式与软件相关联而产生的。
无运行时依赖项
~185KB