【问题标题】:What is the Rust compiler flag to disable heap allocation?禁用堆分配的 Rust 编译器标志是什么?
【发布时间】:2018-08-20 15:31:55
【问题描述】:

我正在阅读 an article,它说 Rust 有一个编译器选项来禁用堆分配:

Rust 有许多依赖于堆的标准库特性, 像盒子。然而,Rust 有编译器指令来完全 禁用任何使用堆的语言功能,并静态验证 这些功能都没有被使用。这是完全实用的 编写一个不使用堆的 Rust 程序。

在编译时检查任何错误的堆分配的能力对我来说非常有价值。究竟如何在 Rust 中做到这一点?我在rustc man page 中没有看到任何相关标志。

【问题讨论】:

    标签: rust


    【解决方案1】:

    没有这样的编译器标志,虽然我不认为那是文章的意思:

    Rust 有编译器指令

    我会将“指令”解析为属性,例如 #[foo]。据我所知,仍然没有可以实现此目标的属性。

    请注意,您的文章早于 Rust 1.0:

    Rust,0.11 版


    你能得到的最接近的是避免使用标准库而只使用the core library。这避免了使用liballoc,这是主要的分配机制。这样做可以防止 BoxString 这样的类型甚至不存在,这是一个非常强大的静态保证。

    #![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 中的相同代码并自己分配内存。您还可以链接到分配内存的现有库。没有检测堆分配的神奇编译器传递。

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      相关资源
      最近更新 更多