Embora seja comumente acreditado que std::vector opera de forma semelhante a arrays, testes recentes desafiaram essa noção. Neste artigo, examinaremos as diferenças de desempenho entre std::vector e arrays simples e esclareceremos os motivos subjacentes.
Para conduzir os testes, foi implementado um benchmark que envolveu a criação e modificação repetida de grandes arrays de objetos de pixel. Os testes foram realizados usando duas implementações: std::vector e ponteiros brutos simulando arrays simples.
Os resultados iniciais revelaram uma lacuna significativa de desempenho, com std::vector sendo cerca de 3-4 vezes mais lento que os arrays simples.
UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds
Essa descoberta surpreendente levou a um exame mais detalhado do código. Descobriu-se que a aparente diferença de desempenho resultava do fato de que modificar um elemento no vetor exigia acessá-lo duas vezes: uma vez para redimensionar o vetor e novamente para inicializar o elemento.
Otimizando a implementação do vetor para inicializar cada elemento apenas uma vez, obtivemos um desempenho dramaticamente melhorado:
UseVector completed in 2.216 seconds
Este desempenho revisado agora é comparável ao de arrays simples. É importante observar que a ligeira diferença observada pode ser atribuída a fatores não relacionados à estrutura de dados subjacente.
Concluindo, embora std::vector seja uma estrutura de dados conveniente e versátil, seu desempenho pode ser influenciado por fatores como a maneira pela qual os elementos são inicializados e acessados. Quando o desempenho é crítico, é aconselhável considerar cuidadosamente os requisitos específicos e explorar opções alternativas, como arrays simples ou outras estruturas de dados.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3