Rust中array :: len的运行时复杂度是多少?

时间:2018-06-04 22:34:34

标签: arrays rust time-complexity

Rust中原始数组的len方法的运行时复杂性是多少?我知道它对于VectorString来说是不变的,但是每种类型都会记录它们的长度,而且我找不到关于数组是否属于这种情况的任何文档。

1 个答案:

答案 0 :(得分:6)

原始数组具有恒定长度,因此可以安全地假设在编译期间可以计算数组的大小(编译时常量)

假设:

let array = [1, 2, 3, 4, 5];
println!("Length: {}", array.len());

调试版本给出:

callq   alloc::slice::<impl [T]>::len
movq    %rax, -16(%rbp)
movq    core::fmt::num::<impl core::fmt::Display for usize>::fmt@GOTPCREL(%rip), %rsi

调试版本似乎将责任委托给切片的len方法。

但是,正如预期的那样,发布版本会在编译期间计算一个常量,将其直接推入堆栈并使用它:

movq    $5, (%rsp)
movq    core::fmt::num::<impl core::fmt::Display for usize>::fmt@GOTPCREL(%rip), %rax