, 나는에서 병목 현상을 발견했다. 다음 코드로 바꾸면 성능이 크게 향상되었습니다. 는 (. 위의 전체 시간의 10 %를 복용 한 코드는 아래의 코드는 0.34 % 소요)벡터 삽입
vec->insert(vec->end(), buffer, buffer + len);
문제의 벡터는 다음과 같은 유형이 있습니다 vector<char>* vec
이
이 사람이 되거 수를 왜 두 번째 버전은 훨씬 빠릅니다.
첫 번째 버전에서는 공간을 예약했지만 시도가 개선되지 않았습니다.
두 번째 경우에는 얼마나 많은 요소가 필요한지 알기 때문에 벡터가 하나의 단일 할당을 수행 할 수 있습니다. 단지 야생의 추측. – juanchopanza
루프 전에 'vec.reserve (len)'을 호출하여 첫 번째 버전의 속도를 향상시킬 수 있습니다 .... –
관련 유형이'char'이기 때문에'insert' 연산은 이론상 동등한 것으로 줄일 수 있습니다 (필요한 경우) 하나의 'memcpy'가 뒤 따른다. 그러나 첫 번째 예제는 벡터에 len 개 연산과 루프 오버 헤드를 어느 정도 포함시키는 것입니다. 표준 라이브러리 코드를 추적하면 실제로 어떤 일이 일어나는지 알 수 있습니다. – dlf