운명의 역전: std::Vector를 통한 반복이 std::array를 능가함
초기 가정과 달리 최근 벤치마크 결과 std::Vector를 통해 반복하는 것이 std::array를 통해 반복하는 것보다 훨씬 빠릅니다. 이는 어레이가 우수한 반복 성능을 제공한다는 이전의 믿음과 상반됩니다.
정확성을 보장하기 위해 벤치마크에서는 몇 가지 개선 사항을 적용했습니다.
std::array 및 std::Vector에 대해 측정된 시간은 다음과 같습니다. 다음은 다음과 같습니다.
std::array: 99.554109 milliseconds std::vector: 30.734491 milliseconds
원인 탐색
std::Vector의 놀라운 속도 이점은 메모리 페이징에 기인할 수 있습니다. 전역 범위에 저장되는 배열은 처음에는 실행 파일의 .bss 섹션에 상주하며 프로세스 주소 공간으로 페이징되지 않습니다. 이와 대조적으로 std::Vector는 생성 중에 할당되고 0으로 채워지므로 메모리 페이지가 메모리에 존재하게 됩니다.
문제 해결
경쟁의 장을 평준화하려면 반복 전에 배열을 명시적으로 초기화하거나 해당 페이지를 메모리로 가져올 수 있습니다. 다음은 배열 반복 시간을 std::Vector:
<code class="cpp">std::fill_n(v.data(), n, 1);</code>
또는 mlock() 함수를 사용하여 Linux 시스템의 메모리에 배열 페이지를 강제로 저장할 수 있도록 수정한 것입니다.
이 조정은 std::array와 std::Vector 간의 성능 차이가 주로 메모리 관리 전략에서 비롯된다는 점을 보여주며, 프로그램 성능에서 메모리 액세스 패턴의 중요성을 강조합니다.
위 내용은 `std::array`보다 `std::벡터`를 반복하는 것이 더 빠른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!