我正在阅读an article,其中说Rust有一个编译器选项来禁用堆分配:
Rust具有许多依赖堆的标准库功能, 像盒子。但是,Rust的编译器指令可以完全 禁用所有使用堆的语言功能,并静态验证 这些功能均未使用。完全可行 编写没有堆使用情况的Rust程序。
在编译时检查任何错误堆分配的能力对我来说非常有价值。确切地说,您如何在Rust中做到这一点?我在rustc man page中看不到任何相关的标志。
答案 0 :(得分:6)
没有这样的编译器标志,尽管我认为这不是本文的意思:
Rust具有编译器指令
我会将“指令”解析为属性,例如#[foo]
。我仍然不知道可以实现此目标的属性。
请注意,您的文章早于Rust 1.0:
Rust,版本0.11
您能获得的最接近的结果是避免使用标准库,而仅使用the core library。这样可以避免使用liballoc
(分配的主要机制)。这样做可以防止甚至存在Box
或String
之类的类型,这是非常强大的静态保证。
#![no_std]
pub fn example() {
Box::new(42);
}
error[E0433]: failed to resolve. Use of undeclared type or module `Box`
--> src/lib.rs:4:5
|
4 | Box::new(42);
| ^^^ Use of undeclared type or module `Box`
但是,没有什么可以阻止您重写liballoc中相同的代码并自己分配内存。您也可以链接到分配内存的现有库。没有魔术编译器可以检测堆分配。
另请参阅: