Declarando variáveis atrás do laço ou dentro do laço? - página 3

 
Aleksandr Matveev:

Tenho uma suspeita de que o autor deste comentário não sabe de todo como funciona o processador, a memória e o compilador...

Acho que o autor foi tão irrefletido que não entendeu a pergunta.

O que a memória e a CPU têm a ver com isso? A questão era sobre a otimização na MQL5.

P.S. Leia em seu lazer o pequeno livro " Technique of Attention Development, O.A. Andreev, 2007".

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

O que a memória e a CPU têm a ver com isso? A questão era sobre a otimização na MQL5.

Então esse código, na sua opinião, não usa nem memória nem CPU? E estou respondendo à declaração sobre compiladores: "Você terá que se esforçar muito para superar as otimizações dos compiladores modernos. "

 
Aleksandr Matveev:

Tenho uma suspeita de que o autor desta declaração não sabe de todo como funciona o processador, a memória e o compilador... Estou disposto a apostar que qualquer um de seus códigos pode ser acelerado pelo menos dez vezes, ou mesmo centenas de vezes.

Portanto, primeiro tente provar isso com respeito ao código em questão. Além disso, se você acredita nos resultados acima citados por Igor, é o contrário: a declaração dentro do laço funciona um pouco mais rápido.

Portanto, toda essa dança e essa confusão ao redor de tentar enganar o compilador custa mais no final das contas. Isso torna mais difícil para o compilador otimizar o código. Quando uma variável é declarada fora de um bloco é considerada externa epreserva seu estado entre iterações, o que significa que o compilador tem uma capacidade limitada de otimizá-la. O código limpo é sempre melhor otimizado do que o código "sujo" (que tem efeitos colaterais), se você estiver familiarizado com o paradigma de programação funcional.

 
Alexey Navoykov:

Portanto, primeiro tente provar isso com respeito ao código em questão. Além disso, se você acredita nos resultados acima citados por Igor, é o contrário: a declaração dentro do laço funciona um pouco mais rápido.

Portanto, toda essa dança e essa confusão ao redor de tentar enganar o compilador custa mais no final das contas. Isso torna mais difícil para o compilador otimizar o código. Quando uma variável é declarada fora de um bloco é considerada externa e preserva seu estado entre iterações, o que significa que o compilador tem habilidades limitadas para otimizá-la. O código limpo é sempre melhor otimizado do que o código "sujo" (que tem alguns efeitos colaterais) se você conhecer o paradigma de programação funcional.

Leia a seu gosto meu livro, acho que você aprenderá muito sobre compiladores.

 
Alexey Navoykov:

Portanto, primeiro tente provar isso com respeito ao código em questão. Além disso, se você acredita nos resultados acima citados por Igor, é o contrário: a declaração dentro do laço funciona um pouco mais rápido.

Portanto, toda essa dança e essa confusão ao redor de tentar enganar o compilador custa mais no final das contas. Isso torna mais difícil para o compilador otimizar o código. Quando uma variável é declarada fora de um bloco, ela é considerada como uma variável externa que mantém seu estado entre iterações. Isto significa que o compilador tem opções limitadas para sua otimização. O código limpo é sempre melhor otimizado do que o código "sujo" (que tem efeitos colaterais), se você estiver familiarizado com o paradigma de programação funcional.

Meu teste mostra o oposto, o código com uma declaração variável por trás do laço funciona mais rápido

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

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

Rodar muitas vezes, resultado é estável, código com declaração de variável após o loop, funciona mais rápido

É estranho, mas antes a pessoa tinha o resultado oposto
 
pivalexander:

Meu teste mostra o oposto, o código com uma declaração variável por trás do laço é mais rápido

O resultado que você obtém dentro do laço não é usado de forma alguma. Os resultados de tais testes vazios não podem ser confiáveis. O compilador poderia simplesmente ter cortado todo o corpo do laço em um único caso.
 
Alexey Navoykov:
É estranho, mas antes o homem tinha os resultados opostos

Você deve aprender o básico primeiro e depois provar seu ponto de vista. Você entenderia o resultado sem nenhum teste, se você tivesse lido pelo menos um livro sobre operação de CPU e memória. Eu lhe ofereci o mais engenhoso, se você quiser avançar um pouco na programação, você o lerá.

 
Alexey Navoykov:
Estranho, mas antes o homem tinha os resultados opostos

Eu já disse que tal teste de velocidade em um exemplo artificial não é nada indicativo. Minha pesquisa sob o depurador não é suficiente? Eu não tenho credibilidade? Tudo ignorado, cabe a você, estou fora.

 
Alexey Navoykov:

Além disso, se você acredita nos resultados do Igor acima, é o oposto.

Eu não acredito em mim mesmo, eu sempre checo duas vezes, não acho que você precise aumentar minha auto-estima... Houve casos diferentes na história, vou encontrar um Napoleão, e vamos lá! ))))


Alexey Navoykov:
É estranho, mas antes o homem obteve os resultados opostos.

Por que eu adicionei srand(GetTickCount()) ao meu teste? ?

;)