#macro #memory #access #static #heap #no-alloc #prealloc

无 std prealloc_impl

堆类似内存预分配时间构建

1 个不稳定版本

0.1.0 2024 年 8 月 10 日

#152#heap

Download history 119/week @ 2024-08-10

119 每月下载量
prealloc 中使用

MIT/Apache

8KB
92

Prealloc 允许像堆一样访问静态内存

快速入门

安装

将此依赖项添加到您的 Cargo.toml

[dependencies]
prealloc = "0.1.0"

配置文件

创建一个 JSON 配置文件(例如 config.json),定义项目、其类型和数量

[
    {
        "name": "MyStruct",
        "type": "my_project::MyStruct",
        "size": 3
    },
    {
        "name": "MyEnumUseCaseA",
        "type": "my_project::MyEnum",
        "size": 5
    },
    {
        "name": "MyEnumUseCaseB",
        "type": "my_project::MyEnum",
        "size": 2
    }
]

示例

use prealloc::prealloc_from_config;

prealloc_from_config!("path/to/config.json");

#[derive(Debug)]
#[allow(dead_code)]
pub enum MyEnum {
    L(u32),
    R,
}

impl Drop for MyEnum {
    fn drop(&mut self) {
        println!("Dropping MyEnum located at {self:p}");
    }
}

fn main() {
    for idx in 0..=5 {
        // The dispatch_static macro retrieves one preallocated element and initializes it. 
        if let Some(item) = dispatch_static!(MyEnumUseCaseA, MyEnum::L(33)) {
            println!("Retrieved {idx}: {item:p}");
        } else {
            println!("MyEnumUseCaseA depleted");
        }
    }
}

使用此crate上的 cargo run --example 命令发现更多示例。

许可协议

根据您的选择,受 Apache 许可证 2.0 或 MIT 许可证的许可。

除非您明确声明,否则根据 Apache-2.0 许可证定义的任何有意提交以包含在此crate中的贡献,均将双重许可如上所述,而不附加任何其他条款或条件。

有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT 文件。

依赖项

~0.7–1.6MB
~35K SLoC