TIL - Rust vec.resize() is slow in debug
I was doing some tinkering with OpenGL and some code I copied from the example
used Vec::resize()
to resize a vector. And I discovered this was terribly
slow when not compiled for release.
Let's compare the following code:
#[macro_use]
extern crate log;
fn main() {
env_logger::init();
let len: usize = 10_000 * 10_000 * 4;
info!("start");
let mut pixels: Vec<u8> = vec![];
pixels.resize(len, 0);
info!("end");
}
This, when run with RUST_LOG=info cargo run
:
[2020-04-25T13:23:05Z INFO resize_test] start
[2020-04-25T13:23:22Z INFO resize_test] end
17 seconds to resize the vector!!!
Now, this code:
#[macro_use]
extern crate log;
fn main() {
env_logger::init();
let len: usize = 10_000 * 10_000 * 4;
info!("start");
let mut pixels: Vec<u8> = vec![0; len];
info!("end");
}
[2020-04-25T13:24:46Z INFO resize_test] start
[2020-04-25T13:24:46Z INFO resize_test] end
Is "instant".
The issue is not present when compiling with --release
.
This is with rustc 1.40.0 (73528e339 2019-12-16)