Какова сложность времени исполнения array :: len в Rust? - PullRequest
0 голосов
/ 05 июня 2018

Какова сложность во время выполнения метода len для примитивных массивов в Rust?Я понимаю, что это константа для Vector и String, однако каждый из этих типов отслеживает их длину, и я не могу найти никакой документации о том, так ли это для массивов.

1 Ответ

0 голосов
/ 05 июня 2018

Примитивные массивы имеют постоянную длину, поэтому можно предположить, что размер массива можно вычислить во время компиляции (постоянная времени компиляции)

Дано:

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
...