22个版本 (9个稳定版)

3.0.2 2024年3月25日
3.0.0 2021年8月5日
2.2.0 2020年5月28日
2.1.2 2019年6月20日
0.0.3 2016年11月30日

#12 in 内存管理

Download history 37644/week @ 2024-04-29 46836/week @ 2024-05-06 51427/week @ 2024-05-13 54868/week @ 2024-05-20 56980/week @ 2024-05-27 50723/week @ 2024-06-03 52839/week @ 2024-06-10 53974/week @ 2024-06-17 42461/week @ 2024-06-24 46648/week @ 2024-07-01 57478/week @ 2024-07-08 63789/week @ 2024-07-15 51611/week @ 2024-07-22 55972/week @ 2024-07-29 57574/week @ 2024-08-05 47376/week @ 2024-08-12

216,642 每月下载量
485 个crate中(49 个直接使用) 使用

MIT 协议

81KB
1.5K SLoC

region-rs

跨平台虚拟内存API

GitHub CI Status crates.io version Documentation License

此crate提供了一个跨平台的Rust API,用于分配、查询和操作虚拟内存。它是一个薄层抽象,底层交互使用特定平台的API实现(例如 VirtualQueryVirtualAllocVirtualLockmprotectmmapmlock)。

平台

此库持续对这些目标进行测试

  • Linux
    • aarch64-linux-android
    • armv7-unknown-linux-gnueabihf
    • i686-unknown-linux-gnu
    • mips-unknown-linux-gnu
    • x86_64-unknown-linux-gnu
    • x86_64-unknown-linux-musl
  • Windows
    • i686-pc-windows-gnu
    • i686-pc-windows-msvc
    • x86_64-pc-windows-gnu
    • x86_64-pc-windows-msvc
  • macOS
    • x86_64-apple-darwin
  • NetBSD
    • x86_64-unknown-netbsd
  • FreeBSD
    • x86_64-unknown-freebsd
  • OpenBSD
    • x86_64-unknown-openbsd

... 以及持续对这些目标进行测试

  • Illumos
    • x86_64-unknown-illumos

除了上述的目标三元组之外,该库还预期可以在许多省略的架构上工作。

安装

将其添加到您的 Cargo.toml

[dependencies]
region = "3.0.2"

示例

  • 跨平台等效
let data = [0xDE, 0xAD, 0xBE, 0xEF];

// Page size
let pz = region::page::size();

// VirtualQuery | '/proc/self/maps'
let q  = region::query(data.as_ptr())?;
let qr = region::query_range(data.as_ptr(), data.len())?;

// VirtualAlloc | mmap
let alloc = region::alloc(100, Protection::READ_WRITE)?;

// VirtualProtect | mprotect
region::protect(data.as_ptr(), data.len(), Protection::READ_WRITE_EXECUTE)?;

// ... you can also temporarily change one or more pages' protection
let handle = region::protect_with_handle(data.as_ptr(), data.len(), Protection::READ_WRITE_EXECUTE)?;

// VirtualLock | mlock
let guard = region::lock(data.as_ptr(), data.len())?;

依赖项

~0–8.5MB
~58K SLoC