Примитивные массивы имеют постоянную длину, поэтому можно предположить, что размер массива можно вычислить во время компиляции (постоянная времени компиляции)
Дано:
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