私はこのコードを実行すると:なぜデバッグモードで構造体の大きなベクトルの要素にアクセスするのが、より小さなものにアクセスするよりも遅いのですか?
#[derive(Copy, Clone)]
pub struct Element {
pub key: u64,
}
pub fn test1(u: usize) {
let now = std::time::SystemTime::now();
let tt = vec![Element { key: 0 }; u];
for _ in 0..10000000 as u64 {
if tt[155].key == 893472348628 {}
}
match now.elapsed() {
Ok(elapsed) => {
println!(
"With struct, size of vec={}: Time elapsed: {}.{} seconds",
u,
elapsed.as_secs(),
elapsed.subsec_nanos()
);
}
Err(e) => {
println!("Error: {:?}", e);
panic!();
}
}
}
pub fn test2(u: usize) {
let now = std::time::SystemTime::now();
let tt = vec![0u64; u];
for _ in 0..10000000 as u64 {
if tt[155] == 893472348628 {}
}
match now.elapsed() {
Ok(elapsed) => {
println!(
"With u64, size of vec={}: Time elapsed: {}.{} seconds",
u,
elapsed.as_secs(),
elapsed.subsec_nanos()
);
}
Err(e) => {
println!("Error: {:?}", e);
panic!();
}
}
}
fn main() {
test1(100000);
test1(100000000);
test2(100000);
test2(100000000);
}
を、私はこれらの結果を得る:
With struct, size of vec=100000: Time elapsed: 1.268881822 seconds
With struct, size of vec=100000000: Time elapsed: 12.470818140 seconds
With u64, size of vec=100000: Time elapsed: 1.171180429 seconds
With u64, size of vec=100000000: Time elapsed: 1.230393828 seconds
私は2番目の関数呼び出しが最初のものよりも10倍遅くなるべき理由何らかの理由が表示されません。
if tt[155].key == 893472348628 {}
私は多分それはそれとは何かを持っている、RAM 8GBので、64ビットのLinuxマシンを持っている:リリースモードは、これらの行を無視するので、私はデバッグモードでそれをコンパイルしたのですか?
あなたの投稿にあなたが行った編集をお勧めしたいと思います。質問は、今より多くの*良い状態にあり、答えが得られる程度に十分です。 – Shepmaster