Dichiarare le variabili dietro il ciclo o dentro il ciclo? - pagina 3

 
Aleksandr Matveev:

Ho il sospetto che l'autore di questo commento non sappia affatto come funziona il processore, la memoria e il compilatore...

Credo che l'autore sia stato così sconsiderato da non capire la domanda.

Cosa c'entrano la memoria e la CPU? La domanda riguardava l'ottimizzazione in MQL5.

P.S. Leggete a vostro piacimento il divertente piccolo libro " Tecnica di sviluppo dell'attenzione, O.A. Andreev, 2007".

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

Cosa c'entrano la memoria e la CPU? La domanda riguardava l'ottimizzazione in MQL5.

Quindi questo codice, secondo te, non usa né memoria né CPU? E rispondo all'affermazione sui compilatori: "Dovrete impegnarvi a fondo per battere le ottimizzazioni dei compilatori moderni. "

 
Aleksandr Matveev:

Ho il sospetto che l'autore di questa dichiarazione non sappia affatto come funzionano il processore, la memoria e il compilatore... Sono pronto a scommettere che qualsiasi vostro codice può essere accelerato almeno dieci volte, o anche centinaia di volte.

Quindi, prima cerca di dimostrarlo rispetto al codice in questione. Inoltre, se si crede ai risultati citati da Igor, è il contrario: la dichiarazione all'interno del ciclo funziona un po' più velocemente.

Quindi tutto questo ballare e rimescolare cercando di superare in astuzia il compilatore costa di più alla fine. Rende più difficile al compilatore ottimizzare il codice. Quando una variabile è dichiarata fuori da un blocco, è considerata esterna econserva il suo stato tra le iterazioni. Questo significa che il compilatore ha opzioni limitate per ottimizzarla. Il codice pulito è sempre ottimizzato meglio del codice "sporco" (che ha effetti collaterali), se avete familiarità con il paradigma di programmazione funzionale.

 
Alexey Navoykov:

Quindi, prima cerca di dimostrarlo rispetto al codice in questione. Inoltre, se si crede ai risultati citati da Igor, è il contrario: la dichiarazione all'interno del ciclo funziona un po' più velocemente.

Quindi tutto questo ballare e rimescolare cercando di superare in astuzia il compilatore costa di più alla fine. Rende più difficile al compilatore ottimizzare il codice. Quando una variabile è dichiarata fuori da un blocco è considerata esterna e conserva il suo stato tra le iterazioni, il che significa che il compilatore ha capacità limitate di ottimizzarla. Il codice pulito è sempre meglio ottimizzato del codice "sporco" (che ha effetti collaterali) se si conosce il paradigma della programmazione funzionale.

Leggete a vostro piacimento il mio libro, penso che imparerete molto sui compilatori.

 
Alexey Navoykov:

Quindi, prima cerca di dimostrarlo rispetto al codice in questione. Inoltre, se si crede ai risultati citati da Igor, è il contrario: la dichiarazione all'interno del ciclo funziona un po' più velocemente.

Quindi tutto questo ballare e rimescolare cercando di superare in astuzia il compilatore costa di più alla fine. Rende più difficile al compilatore ottimizzare il codice. Quando una variabile è dichiarata al di fuori di un blocco, è considerata come una variabile esterna che mantiene il suo stato tra le iterazioni. Questo significa che il compilatore ha opzioni limitate per la sua ottimizzazione. Il codice pulito è sempre ottimizzato meglio del codice "sporco" (che ha effetti collaterali), se avete familiarità con il paradigma di programmazione funzionale.

Il mio test mostra il contrario, il codice con una dichiarazione di variabile dietro il ciclo funziona più velocemente

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

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

Esegui molte volte, il risultato è stabile, il codice con la dichiarazione della variabile dopo il ciclo, funziona più velocemente

È strano, ma prima la persona ha avuto il risultato opposto
 
pivalexander:

Il mio test mostra il contrario, il codice con una dichiarazione di variabile dietro il ciclo è più veloce

Il risultato che si ottiene all'interno del ciclo non viene utilizzato in alcun modo. Non ci si può fidare dei risultati di questi test vuoti. Il compilatore avrebbe potuto semplicemente tagliare l'intero corpo del ciclo in un caso.
 
Alexey Navoykov:
È strano, ma prima l'uomo ha avuto i risultati opposti

Dovresti prima imparare le basi e poi dimostrare il tuo punto di vista. Capireste il risultato senza alcun test, se aveste letto almeno un libro sul funzionamento della CPU e della memoria. Vi ho offerto il più ingegnoso, se volete avanzare un po' nella programmazione, lo leggerete.

 
Alexey Navoykov:
Strano, ma prima l'uomo ha avuto i risultati opposti

Ho già detto che un tale test di velocità su un esempio artificiale non è affatto indicativo. La mia ricerca sotto il debugger non è sufficiente? Non ho alcuna credibilità? Tutto ignorato, dipende da voi, io sono fuori.

 
Alexey Navoykov:

Inoltre, se si crede ai risultati di Igor di cui sopra, è il contrario.

Non mi credo, controllo sempre due volte, non credo che tu abbia bisogno di aumentare la mia autostima... Ci sono stati diversi casi nella storia, troverò un Napoleone, e andiamo! ))))


Alexey Navoykov:
È strano, ma prima l'uomo ha ottenuto i risultati opposti.

Perché ho aggiunto srand(GetTickCount()) al mio test? ?

;)