gpt4 book ai didi

rust - 是否可以将 Box 与 no_std 一起使用?

转载 作者:行者123 更新时间:2023-11-29 08:16:42 27 4
gpt4 key购买 nike

我想在带有 no_std 的 crate 中使用 Box。这可能吗?到目前为止,我的简单尝试都没有奏效。

这个编译(但使用标准库):

fn main() {
let _: Box<[u8]> = Box::new([0; 10]);
}

这不是:

#![no_std]

fn main() {
let _: Box<[u8]> = Box::new([0; 10]);
}

( Playground )

但是,查看 Rust 源代码,我看到 Box 是在 liballoc 中定义的,并带有警告

This library, like libcore, is not intended for general usage, but rather as a building block of other libraries. The types and interfaces in this library are reexported through the standard library, and should not be used through this library.

因为 Box 不依赖于 std 而只是为它重新导出,看来我只需要找出将它导入我的代码的正确方法。 (尽管这似乎不被推荐。)

最佳答案

您必须导入 the alloc crate :

#![no_std]

extern crate alloc;

use alloc::boxed::Box;

fn main() {
let _: Box<[u8]> = Box::new([0; 10]);
}

alloc crate 是编译器提供的(就像非 no_std 环境中的 std 一样),所以你不需要拉它来自 crates.io 或在 Cargo.toml 中指定。自 Rust 1.36 ( stabilization PR ) 以来, crate 是稳定的。

请注意,由于缺少 lang_items,它会编译为一个库,而不是二进制文件。不幸的是,编译一个 no_std 二进制文件仍然需要 Rust nightly。

关于rust - 是否可以将 Box 与 no_std 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37843379/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com