std::borrow 模块:https://doc.rust-lang.org/std/borrow/index.html [11] std::default 模块:https://doc.rust-lang.org/std/default/index.html [12] std::rc 模块:https://doc.rust-lang.org/std/rc/index.html [13] std::cell 模块:
[cfg_attr(not(test), no_std)] 来告诉 rustc 只有在禁用 test 标志时才编译为 no-std Rust,这样我们就可以在测试中使用 std,就像 std Rust 一样。 如果我们需要使用alloc crate,我们需要在*lib.rs中再添加一行 "extern crate alloc";由于alloc*是一个内置的crate,rustc会自动为我们链接它。 `//! lib...
最后可能需要做一些标准库的替换,使其能在no_std和std同时编译成功,一些可以使用的类型库有sp-std(这个库仅仅封装了一部分的类型,例如有些类型是没有的,string,File, IO)当然,IO,File,这些标准库在核心库当中是没有的。还有rust本身的alloc, core这些都是属于核心库的。也是在no_std环境下支持的。 具体的使用...
std::fmt 模块[20]提供了格式化输出的功能,包括对各种数据类型的格式化和打印。 std::num 模块[21]提供了对数字类型的抽象和操作,包括整数、浮点数和复数等。 std::cmp 模块[22]提供了用于比较和排序值的工具,包括比较运算符的实现和排序函数。 std::hash 模块[23]提供了用于计算哈希值的功能,包括对各种数据...
当前,尚无从no_std模块中分配内存的标准方法。 这提供了一种机制,可以描述通过不安全地链接到calloc或不安全地引用可变全局变量,可以完全在堆栈上满足的内存分配。 如果未专门在内存上调用free_cell,则该库当前将泄漏内存。 但是,如果由实际上依赖于stdlib的库链接,则该库可以简单地传入一些分配器并使用标准Box分配...
但这可能是不可持续的。最终,我们需要锁定代码库,但我没有明确的退出策略。也许我们可以考虑仍然使用 `no-std` 以获得稳定的 `alloc` 功能来访问堆。但这样我们就还需要使用 Vec、HashMap、Thread 和 Arc/Mutex/Rc/RefCell/Box 构造等,以使 Xous 能够被有效编码。
std是core+alloc,以及操作系统API,如文件和线程支持。#[no_std]禁用了std和alloc,留下了core。在本文档中,我们将只使用core类型,尽管我们可以通过std命名空间来引用它们(它们是别名)。也就是说,我们可以引用std::mem::drop,尽管在#[no_std]代码中它必须被命名为core::mem::drop。
[no_main] #![no_std] mod alloc; // 后面是导出C的一些函数 alloc.rs use talc::*; static mut ARENA: [u8; 10000] = [0; 10000]; #[global_allocator] static ALLOCATOR: Talck<spin::Mutex<()>, ClaimOnOom> = Talc::new(unsafe { ClaimOnOom::new(Span::from_const_array(core::ptr:...
alloc不需要操作系统的支持,但需要malloc和free符号。std是core+alloc,以及操作系统API,如文件和线程支持。#[no_std] 禁用了std和alloc,留下了core。在...
公告指出,gccrs 未在 GCC 13 中准备好,跟 Rust 本身 “nothing will work, unless everything works” 的严格设计脱不了干系。Rust 标准库可以被看作是几个相互依赖的 crates,其中两个主要组成部分是 core 和 alloc。就目前而言,gccrs 还不能编译其目标版本的 core crate;虽然 Philip 正在推进该方面的...