在使用 Rust 开发Brainfuck解释器时,我注意到cargo bench当基准包含大型类型时,构建 Criterion 工作台需要花费非常长的时间。
作为 Brainfuck 实现的一部分,我定义了一个具有非常大数组的结构来充当解释器内存。当我使用 进行编译时cargo build --release,我的 crate 在几秒钟内即可构建完成,但是当我运行时,cargo bench构建需要 6 分钟以上!我最终意识到这与我的类型定义中的非常大的数组有关([u8; 30_000])。我认为我可以通过间接方式使类型更小,因此我将类型更改为 a ,Box<[u8; 30_000]>这确实显着减少了基准测试的构建时间。
我的问题是:为什么cargo bench构建比cargo build --release没有花费更长的时间Box<>,它们不应该使用相同的优化级别吗?为什么不用cargo build --release那么长时间Box<>?
这可能是 Criterion 的一个错误吗?
我确认cargo bench --no-run --timings几乎所有的时间都在建造长凳本身。我还做了一个最小的可重现示例:
cargo --version
> cargo 1.64.0 (387270bc7 2022-09-16)
Run Code Online (Sandbox Code Playgroud)
cargo --version
> cargo 1.64.0 (387270bc7 2022-09-16)
Run Code Online (Sandbox Code Playgroud)
[package]
name = "large-type"
version = …Run Code Online (Sandbox Code Playgroud)