는 :디버그 모드에서 구조체의 큰 벡터 요소에 액세스하는 것이 왜 더 작은 구조체에 액세스하는 것보다 느린 것입니까? 나는이 코드를 실행하면
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
내가 두 번째 함수 호출이 첫 번째보다 10 배 느린해야 어떤 이유가 표시되지 않습니다
#[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);
}
을 나는 이러한 결과를 얻을 수 있습니다.
if tt[155].key == 893472348628 {}
나는 어쩌면 그와 함께 할 수있는 뭔가가, 8GB의 RAM과 64 비트 리눅스 머신을 가지고 : 릴리스 모드는이 라인을 무시하기 때문에 나는 디버그 모드로 컴파일 했는가?
게시물에 대한 수정 사항에 대해 감사드립니다. 질문은 이제 더 많은 * 좋은 상태에 있고 응답 할만큼 충분히 구체적입니다. – Shepmaster