Escribir software en lenguaje C
. Una de las consecuencias no deseadas es que la eficiencia del código de destino es muy diferente. He visto algunas discusiones antes sobre la eficiencia de ambos, pero sigue siendo impactante cuando lo ves en persona. En mi trabajo, la eficiencia no es una preocupación para mí, pero no deja de tener valor de optimización. Dado que stl se usa mucho en el código, surgió la idea de comparar el rendimiento de stl de diferentes compiladores. Mi objetivo no es sólo obtener un concepto cualitativo, sino obtener una conclusión cuantitativa. Incluso si los datos no son muy precisos, sigue siendo un salto cualitativo de lo cualitativo a lo cuantitativo.
El STL en BCB6.0 ya es STLPort, es decir, se deriva del STL de SGI, y el STL de SGI se considera la mejor implementación de STL. Algunas personas pueden pensar que sí. La comparación es injusta. Sin embargo, solo estoy comparando dos productos completos y no me importa de quién sean los resultados que aproveche. Si alguien está dispuesto a reemplazar el STL de VC con STLPort antes de comparar, esta es, naturalmente, una tarea que vale la pena intentar.
Orientación:
Para evaluar los problemas de eficiencia, normalmente aislo lo que se necesita probar y obtengo algunos resultados detallados de comparación de eficiencia, y luego podemos comparar estos resultados con los real Se combinan los posibles resultados en el código. Sin embargo, no adoptaría el enfoque de aislar los objetivos de prueba. Los resultados de mis pruebas no pretenden proporcionar estándares para los programadores que optimizan el código, sino proporcionar una referencia de eficiencia para el desarrollo general de programas y una base para tomar ciertas decisiones. Dado que es una referencia para el comportamiento de codificación común, mi código de prueba también debería reflejar el uso común. Por ejemplo, no extiendo mi código para eliminar declaraciones de salto, no evito las llamadas a funciones debido a su sobrecarga y no pienso demasiado en el impacto del almacenamiento en caché.
Además de la comparación entre BCB y VC, también hago muchas comparaciones en el mismo compilador, como entre vectores y listas.
Filtrado de datos de prueba:
A diferencia de muchas de las pruebas que he visto antes, no utilicé el promedio de los resultados de las pruebas. Mi prueba
se realizó en un entorno Windows 2000 y no se puede completar sin considerar la interferencia causada por un entorno multitarea (como la programación de subprocesos). Dado que cada prueba dura poco tiempo, si se produce un cambio de contexto durante la prueba, los resultados estarán muy sesgados, por lo que se debe excluir esta interferencia ocasional. Además, no creo que haya nada inesperado que pueda acortar el tiempo de ejecución del caso de prueba. Entonces, la forma en que lo filtré fue ejecutar varias pruebas y elegir la que tuviera el resultado más rápido. El enfoque correcto es eliminar los datos de prueba que obviamente fallaron y encontrar la media y su varianza. A juzgar por los resultados de mi prueba, el método de seleccionar el valor mínimo tiene un error menor que 1 en comparación con el método de promediar. Por razones de simplicidad, se selecciona el valor mínimo como resultado de la prueba.
Algunas notas sobre el método de prueba:
Para realizar pruebas de rendimiento, primero necesita un temporizador. Me gustaría agradecer el método aprendido del waterflier (pájaro que camina sobre el agua) de csdn