>백엔드 개발 >C++ >`std::벡터`는 네이티브 배열보다 정말 느린가요?

`std::벡터`는 네이티브 배열보다 정말 느린가요?

Susan Sarandon
Susan Sarandon원래의
2024-12-23 02:17:10687검색

Is `std::vector` Really Slower Than Native Arrays?

std::벡터가 기본 배열보다 현저히 느린가요?

std::Vector는 기본적으로 다음과 같이 구현된다는 말을 들어보셨을 것입니다. 성능이 비슷해야 함을 의미하는 배열입니다. 그러나 최근 테스트에서는 std::Vector가 상당한 성능 저하를 보이는 등 다르게 제안했습니다. 이 기사의 목적은 std::벡터가 실제로 기본 배열보다 훨씬 느린지 여부를 명확히 하는 것입니다.

성능 분석

제공된 테스트 코드는 대규모 배열을 초기화하는 데 걸리는 시간을 측정합니다. resize()를 사용하는 std::벡터, push_back()을 사용하는 std::벡터, malloc()을 사용하여 할당된 일반 배열의 세 가지 방법을 사용하는 Pixel 객체의 배열입니다. 결과에 따르면 resize()를 사용하는 std::벡터는 일반 배열보다 약 4배 느린 반면, push_back()을 사용하는 std::벡터는 훨씬 더 느립니다.

그러나 자세히 살펴보면 다음과 같은 사실이 분명해집니다. 성능 차이는 테스트 코드가 벡터를 두 번 반복한다는 사실에서 비롯됩니다. 첫 번째 반복에서는 객체를 초기화하고, 두 번째 반복에서는 단순히 객체를 읽습니다. 이는 한 번만 초기화할 수 있는 일반 배열과의 공정한 비교를 용이하게 하기 위해 수행됩니다.

수정된 테스트

std::Vector의 성능을 정확하게 비교하려면 네이티브 배열의 경우 벡터를 한 번만 초기화하도록 테스트 코드가 수정되었습니다.

std::vector<Pixel> pixels(dimensions * dimensions, Pixel(255, 0, 0));

이 수정으로 인해 std::Vector 및 일반 배열은 무시할 수 있게 되었습니다.

g++ -O3 Time.cpp -I <MyBoost>
./a.out
UseVector completed in 2.216 seconds

결론

수정된 테스트 결과에 따르면 std::Vector의 성능은 다음과 비슷합니다. 네이티브 배열의 것입니다. 초기 테스트에서 관찰된 속도 저하의 원인은 std::Vector에 사용된 비효율적인 초기화 방법 때문이었습니다. 적절하게 초기화되면 std::Vector는 기본 배열에 비해 최소한의 성능 오버헤드를 나타냅니다.

제시된 테스트 결과는 Pixel 클래스 및 사용된 특정 초기화 패턴에 특정하다는 점에 유의해야 합니다. 다른 클래스 및 초기화 시나리오에 따라 성능이 달라질 수 있습니다.

위 내용은 `std::벡터`는 네이티브 배열보다 정말 느린가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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