>백엔드 개발 >C++ >초기 벤치마크에서 다르게 제안되었음에도 불구하고 std::벡터 반복이 std::array 반복보다 빠른 이유는 무엇입니까?

초기 벤치마크에서 다르게 제안되었음에도 불구하고 std::벡터 반복이 std::array 반복보다 빠른 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-01 15:35:02328검색

Why is std::vector iteration faster than std::array iteration despite initial benchmarks suggesting otherwise?

std::Vector 반복이 std::array 반복을 능가하는 이유

원래 결론에 대한 오해

처음에는 결함이 있는 벤치마크 std::array 반복이 std::Vector 반복보다 빠르다고 제안했습니다. 그러나 벤치마크를 수정한 결과 std::Vector가 훨씬 더 빠른 것으로 나타났습니다.

벤치마크 구현

정확성을 보장하기 위해 벤치마크에서는 몇 가지 개선 사항을 적용했습니다.

  • 루프 최적화 방지를 위한 결과 활용
  • 속도 향상을 위한-O3 최적화 플래그
  • 정적 변수 간섭 없이 격리된 루프 측정을 위한 std::chrono

결과 및 설명

벤치마크 결과에 따르면 std::Vector 반복은 약 30밀리초 만에 완료되는 반면 std::array 반복은 약 99밀리초가 소요되는 것으로 나타났습니다.

이러한 차이는 메모리 페이지 동작에서 비롯됩니다. 벤치마크에서 std::array는 실행 파일의 .bss 섹션(0 초기화 포함)에 있었기 때문에 해당 메모리 페이지가 프로세스 주소 공간에 로드되지 않았습니다. 반대로, std::Vector가 할당되고 0으로 채워져 페이지가 존재하게 되었습니다.

해결책

std::array의 페이지를 0으로 사전 오류 설정 -Linux에서 mlock()을 채우거나 사용하면 페이지가 주소 공간으로 이동하여 반복 속도가 std::Vector의 속도와 동일해집니다.

위 내용은 초기 벤치마크에서 다르게 제안되었음에도 불구하고 std::벡터 반복이 std::array 반복보다 빠른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.