¿Declaración de variables detrás del bucle o dentro del bucle? - página 3

 
Aleksandr Matveev:

Tengo la sospecha de que el autor de este comentario no sabe en absoluto cómo funcionan el procesador, la memoria y el compilador...

Creo que el autor fue tan desconsiderado que no entendió la pregunta.

¿Qué tienen que ver la memoria y la CPU? La pregunta era sobre la optimización en MQL5.

P.D. Lea con tranquilidad el entretenido libro " Técnica del desarrollo de la atención, O.A. Andreev, 2007".

Техника развития внимания, Андреев О.А., 2007
Техника развития внимания, Андреев О.А., 2007
  • 2018.04.27
  • nashol.com
Смотреть, читать и скачать бесплатно pdf, djvu и купить бумажную и электронную книгу по лучшей цене со скидкой: Техника развития внимания, Андреев О.А., 2007. Настоящая книга написана по Программе интеллектуального и духовного развития личности Школы Олега Андреева. Она посвящена тренировке внимания. Можно использовать книгу как часть Программы или как самостоятельное пособие по технике развития внимания. Настоящее издание является более полным, чем предыдущие, включает новые материалы для самостоятельной работы. Информация изложена в виде восьми уроков. Каждый содержит теоретический раздел, упражнения и инструкции к
 
pivalexander:

¿Qué tienen que ver la memoria y la CPU? La pregunta era sobre la optimización en MQL5.

Así que ese código, en su opinión, no utiliza ni memoria ni CPU? Y respondo a la afirmación sobre los compiladores:" Tendrásque esforzarte mucho para superar las optimizaciones de los compiladores modernos". "

 
Aleksandr Matveev:

Tengo la sospecha de que el autor de esta afirmación no sabe en absoluto cómo funcionan el procesador, la memoria y el compilador... Estoy dispuesto a apostar que cualquiera de sus códigos puede ser acelerado al menos diez veces, o incluso cientos de veces.

Así que primero intenta demostrarlo con respecto al código en cuestión. Además, si crees en los resultados citados por Igor, es al revés: la declaración dentro del bucle funciona un poco más rápido.

Así que todo este baile y barajar tratando de burlar al compilador cuesta más al final. Hace más difícil que el compilador optimice el código. Cuando una variable se declara fuera de un bloque, se considera externa yconserva su estado entre iteraciones, lo que significa que el compilador tiene opciones limitadas para optimizarla. El código limpio siempre se optimiza mejor que el código "sucio" (que tiene efectos secundarios), si se conoce el paradigma de la programación funcional.

 
Alexey Navoykov:

Así que primero intenta demostrarlo con respecto al código en cuestión. Además, si crees en los resultados citados por Igor, es al revés: la declaración dentro del bucle funciona un poco más rápido.

Así que todo este baile y barajar tratando de burlar al compilador cuesta más al final. Hace más difícil que el compilador optimice el código. Cuando una variable se declara fuera de un bloque se considera externa y conserva su estado entre iteraciones, lo que significa que el compilador tiene capacidades limitadas para optimizarla. El código limpio siempre está mejor optimizado que el código "sucio" (que tiene efectos secundarios) si se conoce el paradigma de la programación funcional.

Lee tranquilamente mi libro, creo que aprenderás mucho sobre los compiladores.

 
Alexey Navoykov:

Así que primero intenta demostrarlo con respecto al código en cuestión. Además, si crees en los resultados citados por Igor, es al revés: la declaración dentro del bucle funciona un poco más rápido.

Así que todo este baile y barajar tratando de burlar al compilador cuesta más al final. Hace más difícil que el compilador optimice el código. Cuando una variable se declara fuera de un bloque, se considera una variable externa que conserva su estado entre iteraciones. Esto significa que el compilador tiene opciones limitadas para su optimización. El código limpio siempre se optimiza mejor que el código "sucio" (que tiene efectos secundarios), si se conoce el paradigma de la programación funcional.

Mi prueba muestra lo contrario, el código con una declaración de variable detrás del bucle funciona más rápido

https://www.mql5.com/ru/forum/320307/page2#comment_12886814

Объявление переменных за циклом или внутри цикла?
Объявление переменных за циклом или внутри цикла?
  • 2019.08.18
  • www.mql5.com
или Есть ли разница? с учетом всех оптимизаций компилятора mql5...
 
pivalexander:

Ejecutado muchas veces, el resultado es estable, el código con la declaración de la variable después del bucle, funciona más rápido

Es extraño, pero antes la persona tuvo el resultado contrario
 
pivalexander:

Mi prueba muestra lo contrario, el código con una declaración de variable detrás del bucle es más rápido

El resultado que se obtiene dentro del bucle no se utiliza de ninguna manera. Los resultados de estas pruebas vacías no son de fiar. El compilador podría haber recortado simplemente todo el cuerpo del bucle en un caso.
 
Alexey Navoykov:
Es extraño, pero antes el hombre tuvo los resultados opuestos

Primero deberías aprender lo básico y luego demostrar tu punto de vista. Entenderías el resultado sin necesidad de hacer pruebas, si hubieras leído al menos un libro sobre el funcionamiento de la CPU y la memoria. Te he ofrecido el más ingenioso, si quieres avanzar un poco en la programación, lo leerás.

 
Alexey Navoykov:
Es extraño, pero antes el hombre tuvo los resultados opuestos

Ya he dicho que esa prueba de velocidad en un ejemplo artificial no es nada indicativa. ¿No es suficiente mi investigación bajo el depurador? ¿No tengo ninguna credibilidad? Todo ignorado, depende de ti, yo estoy fuera.

 
Alexey Navoykov:

Además, si crees en los resultados de Igor de arriba, es lo contrario.

No me creo nada, siempre lo compruebo dos veces, no creo que haya que subirme la autoestima... ¡Ha habido diferentes casos en la historia, voy a encontrar un Napoleón, y vamos! ))))


Alexey Navoykov:
Es extraño, pero antes el hombre obtuvo los resultados contrarios.

¿Por qué he añadido srand(GetTickCount()) a mi prueba? ?

;)

Razón de la queja: