std::array와 std::Vector를 통한 반복 간의 성능 차이
반복 성능을 평가하려고 했던 이전 벤치마크 std::array 및 std::Vector에는 몇 가지 결함이 포함되어 있습니다. 그러나 문제를 다시 검토하면서 std::Vector가 실제로 std::array보다 빠르다는 사실을 발견했습니다.
최적화 가능성을 완화하기 위해 다음을 포함한 여러 가지 조치를 취했습니다.
두 데이터 구조의 결과 실행 시간은 다음과 같습니다.
std::array:
$ g++ arrVsVec.cpp -O3 $ ./a.out result: 0 time: 99.554109
std::Vector:
$ g++ arrVsVec.cpp -O3 $ ./a.out result: 0 time: 30.734491
불일치 이유:
성능 불일치는 프로세스 주소에 상주하지 않는 std::array의 메모리 페이지에서 발생합니다. 공간. 특히 전역 범위 std::array는 실행 파일의 .bss 섹션에 위치하며 페이지 인되지 않았으며 0으로 초기화됩니다. 반면, std::Vector는 할당되고 0으로 초기화되어 해당 메모리 페이지가 이미 주소 공간에 존재하게 됩니다.
문제 해결:
이 문제를 제거하고 두 데이터 구조 간의 패리티를 입증하려면 다음 코드를 기본 첫 번째 줄에 추가하여 페이지를 가져올 수 있습니다.
<code class="cpp">std::fill_n(v.data(), n, 1); // included in <algorithm></code>
또는 Linux 시스템에서 mlock(v.data(), v.size() * sizeof(v[0]))을 사용할 수 있습니다. 페이지를 주소 공간으로 강제 이동합니다. 자세한 내용은 man mlock 매뉴얼 페이지를 참조하세요.
위 내용은 반복에서 std::벡터가 std::array보다 빠른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!