Recuerdo hace años que escuché que es más eficiente tener la reducción de los bucles en lugar de aumentar, especialmente al programar microprocesadores. ¿Es esto cierto y, de ser así, cuáles son las razones?¿Es mejor tener ciclos decrecientes?
Respuesta
Una cosa que ocurre fuera del bate es que la condición final en un ciclo decreciente es probable que sea más rápida. Si realiza un bucle hasta un valor de cert, se requerirá una comparación con ese valor en cada iteración. Sin embargo, si está girando hacia abajo a cero, entonces el decrecimiento en la mayoría de los procesadores establecerá el indicador de cero si el valor decrementado llega a cero, por lo que no será necesaria una operación de comparación adicional.
Patatas pequeñas me di cuenta, pero en un lazo interno apretado grande podría importar mucho.
esta es de hecho la respuesta –
Si puede publicar algún análisis de tiempo que muestre este efecto, esta pregunta podría valer la pena abrirla nuevamente. – Gabe
@Gabe - Una solicitud extraña. En general, realmente aplaudo su sospecha de micro-optimización como esta. Ciertamente no estoy ofuscando el código HLL mío para hacer esto a menos que tenga números que muestren que ayuda mucho. Sin embargo, el hecho de que (en procesadores como el M68K o Ix86) esto requiere una instrucción adicional está fuera de toda duda. No creo que realmente tenga el tiempo libre requerido para probarle de manera concluyente que ejecutar ninguna instrucción es más rápido que ejecutar una instrucción. –
En C# no hace ninguna diferencia a la eficiencia. La única razón para tener ciclos decrecientes es si está recorriendo una colección y eliminando elementos a medida que avanza.
No sé acerca de la disminución, pero sé que el uso de ++ i en lugar de i ++ es más eficiente.
Hay muchos artículos en la web sobre por qué esto es, pero todo se reduce a esto: el uso de ++ i lo hace para que me declaren la primera vez de forma automática, y el uso de i ++ no lo hace. (En C# por lo menos)
Una vez más, no sé si decremento es más performante, solo pensé en tirar por ahí que ver cómo se está preguntando sobre el rendimiento :)
Sólo tendría que utilizar decreciente porque es más fácil en algunas situaciones por lo que sé ...
seguramente esto no es cierto –
- 1. ¿Es posible alquilar ciclos de CPU?
- 2. ¿Qué es mejor? INotifyPropertyChanged o tener eventos separados * ¿Cambiados?
- 3. ¿Es mejor tener controladores enormes o muchos controladores en MVC?
- 4. OpenGL es mejor dibujar por lotes o tener VBO estáticas
- 5. Python: ¿es mejor tener múltiples métodos o muchos parámetros opcionales?
- 6. Ciclos en excepciones encadenadas
- 7. Pregunta de UX: es mejor tener "eliminación grave" o tener "basura"
- 8. bloques, self, retener ciclos
- 9. SCons: Ciclos de dependencia?
- 10. fallas de caché decrecientes a través de un buen diseño
- 11. ¿Cómo romper múltiples ciclos foreach?
- 12. Ciclos de puntero en clojure
- 13. algoritmo de gráfico para detectar ciclos pares
- 14. Algoritmo para agrupar todos los Ciclos Juntos
- 15. Decapado de un gráfico con ciclos
- 16. Datos básicos y ciclos de retención
- 17. Encontrar ciclos hamiltonianos en gráficos planos cúbicos
- 18. ¿Es posible tener uritemplates "sobrecargados"?
- 19. Ciclos de evento de interrupción en GUI
- 20. ¿Es posible tener validadores con parámetros?
- 21. recuento de ciclos de reloj con GCC
- 22. referencias débiles en bloques y ciclos retener
- 23. Jackson - serialización de entidades con relaciones birectional (ciclos) evitando
- 24. Cuál es la mejor manera de probar un componente EJB3 sin tener que implementar el componente
- 25. ¿Es mejor tener un objeto grande en JavaScript o muchos más pequeños?
- 26. Linq to SQL: ¿Es mejor tener un pequeño DataContext para cada página o una global?
- 27. ¿Cuál es la mejor manera de empaquetar el código JavaScript sin tener fallas en el rendimiento?
- 28. Cuál es la mejor manera de tener Autenticación para un servicio web
- 29. ¿Cuál es la mejor manera de tener diferentes perfiles para diferentes tipos de usuarios en django?
- 30. ¿es mejor poner más lógica en su cláusula ON o solo debe tener el mínimo necesario?
Tal vez dependa de la directiva del ensamblador 'LOOP' que reduzca 'ECX' a cero. Pero en lenguajes de alto nivel, esto no debería tener mucho efecto. – Nobody
La etiqueta C# es confusa: su pregunta depende de la arquitectura de la CPU, pero C# está compilada en código IL que puede traducirse en diferentes instrucciones de código de máquina según el conjunto de instrucciones –
Si tiene código real que es más rápido en una dirección que en la otra , publicarlo y preguntar por qué. De lo contrario, esta no es una pregunta terriblemente útil. – Gabe