#raw-pointers #memory-safety #safe-abstraction #memory-management #memory-safe #safe-wrapper #ensure

box_raw_ptr

A Rust 库,提供与原始指针安全交互的包装器。这些原始指针是 *const T*mut T。这些包装器通过封装原始指针在安全抽象中并为其提供安全方法来确保内存安全。

3 个稳定版本

使用旧 Rust 2015

2.0.2 2024年6月26日
1.0.0 2024年6月17日
0.5.2 2024年6月16日
0.4.1 2024年6月13日
0.1.8 2024年4月7日

413Rust 模式

Download history 302/week @ 2024-04-27 151/week @ 2024-05-04 6/week @ 2024-05-11 5/week @ 2024-05-18 1/week @ 2024-05-25 169/week @ 2024-06-08 669/week @ 2024-06-15 372/week @ 2024-06-22 60/week @ 2024-06-29 105/week @ 2024-07-06

1,950 每月下载量

MIT/Apache

49KB
419 行代码(不含注释)

box_raw_ptr

box_raw_ptr 是一个 Rust 库,提供用于处理原始指针(*const T*mut T)的安全抽象。它确保适当的对齐、边界检查和安全的内存操作,同时受 Rust 安全原则的启发,允许与 C 风格的内存管理进行互操作。

特性

  • 类型安全:包装器(ConstRawPtrMutRawPtr)确保安全使用原始指针(*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