Deklarieren von Variablen hinter der Schleife oder innerhalb der Schleife? - Seite 3

 
Aleksandr Matveev:

Ich habe den Verdacht, dass der Autor dieses Kommentars überhaupt nicht weiß, wie der Prozessor, der Speicher und der Compiler funktionieren...

Ich glaube, der Autor war so rücksichtslos, dass er die Frage nicht verstanden hat.

Was haben Speicher und CPU damit zu tun? Die Frage bezog sich auf die Optimierung in MQL5.

P.S. Lesen Sie in aller Ruhe das unterhaltsame kleine Buch " Technik der Aufmerksamkeitsentwicklung, O.A. Andreev, 2007".

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

Was haben Speicher und CPU damit zu tun? Die Frage bezog sich auf die Optimierung in MQL5.

Dieser Code verbraucht also Ihrer Meinung nach weder Speicher noch CPU? Und ich antworte auf die Aussage über Compiler: "Man muss sich schon anstrengen, um die Optimierungen moderner Compiler zu übertreffen. "

 
Aleksandr Matveev:

Ich habe den Verdacht, dass der Autor dieser Aussage überhaupt nicht weiß, wie der Prozessor, der Speicher und der Compiler funktionieren... Ich bin bereit zu wetten, dass jeder Ihrer Codes mindestens zehnmal, wenn nicht sogar hundertmal beschleunigt werden kann.

Versuchen Sie also zunächst, dies in Bezug auf den fraglichen Code zu beweisen. Und wenn man den von Igor zitierten Ergebnissen Glauben schenkt, ist es umgekehrt: Die Erklärung innerhalb der Schleife arbeitet etwas schneller.

All dieses Herumtanzen und Herumschieben, um den Compiler zu überlisten, kostet also am Ende mehr. Dadurch wird es für den Compiler schwieriger, den Code zu optimieren. Wenn eine Variable außerhalb eines Blocks deklariert wird, gilt sie als extern undbehält ihren Zustand zwischen den Iterationen bei. Das bedeutet, dass der Compiler nur begrenzte Möglichkeiten hat, sie zu optimieren. Sauberer Code wird immer besser optimiert als "schmutziger" Code (mit Seiteneffekten), wenn Sie mit dem Paradigma der funktionalen Programmierung vertraut sind.

 
Alexey Navoykov:

Versuchen Sie also zunächst, dies in Bezug auf den fraglichen Code zu beweisen. Und wenn man den von Igor zitierten Ergebnissen Glauben schenkt, ist es umgekehrt: Die Erklärung innerhalb der Schleife arbeitet etwas schneller.

All dieses Herumtanzen und Herumschieben, um den Compiler zu überlisten, kostet also am Ende mehr. Dadurch wird es für den Compiler schwieriger, den Code zu optimieren. Wenn eine Variable außerhalb eines Blocks deklariert wird, gilt sie als extern und behält ihren Zustand zwischen den Iterationen bei, was bedeutet, dass der Compiler nur begrenzte Möglichkeiten hat, sie zu optimieren. Sauberer Code ist immer besser optimiert als "schmutziger" Code (der einige Nebeneffekte hat), wenn Sie das Paradigma der funktionalen Programmierung kennen.

Lesen Sie in aller Ruhe mein Buch, ich denke, Sie werden viel über Compiler lernen.

 
Alexey Navoykov:

Versuchen Sie also zunächst, dies in Bezug auf den fraglichen Code zu beweisen. Und wenn man den von Igor zitierten Ergebnissen Glauben schenkt, ist es umgekehrt: Die Erklärung innerhalb der Schleife arbeitet etwas schneller.

All dieses Herumtanzen und Herumschieben, um den Compiler zu überlisten, kostet also am Ende mehr. Dadurch wird es für den Compiler schwieriger, den Code zu optimieren. Wenn eine Variable außerhalb eines Blocks deklariert wird, wird sie als externe Variable betrachtet , die ihren Zustand zwischen den Iterationen beibehält. Das bedeutet, dass der Compiler nur begrenzte Möglichkeiten zur Optimierung hat. Sauberer Code ist immer besser optimiert als "schmutziger" Code (mit Seiteneffekten), wenn Sie mit dem Paradigma der funktionalen Programmierung vertraut sind.

Mein Test zeigt das Gegenteil, Code mit einer Variablendeklaration hinter der Schleife funktioniert schneller

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

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

Viele Male ausgeführt, Ergebnis ist stabil, Code mit Variablendeklaration nach der Schleife, arbeitet schneller

Es ist seltsam, aber früher hatte die Person das gegenteilige Ergebnis
 
pivalexander:

Mein Test zeigt das Gegenteil, Code mit einer Variablendeklaration hinter der Schleife ist schneller

Das Ergebnis, das Sie innerhalb der Schleife erhalten, wird in keiner Weise verwendet. Den Ergebnissen solcher leeren Tests kann man nicht trauen. Der Compiler hätte in einem Fall einfach den gesamten Schleifenkörper herausschneiden können.
 
Alexey Navoykov:
Es ist seltsam, aber früher hatte der Mann das Gegenteil erreicht

Sie sollten zuerst die Grundlagen lernen und dann Ihren Standpunkt beweisen. Sie würden das Ergebnis auch ohne Tests verstehen, wenn Sie wenigstens ein Buch über CPU- und Speicherbetrieb gelesen hätten. Ich habe Ihnen das genialste angeboten, wenn Sie in der Programmierung ein wenig vorankommen wollen, werden Sie es lesen.

 
Alexey Navoykov:
Seltsam, aber früher hatte der Mann das Gegenteil erreicht

Ich habe bereits gesagt, dass ein solcher Geschwindigkeitstest an einem künstlichen Beispiel überhaupt nicht aussagekräftig ist. Reicht meine Recherche unter dem Debugger nicht aus? Bin ich denn gar nicht glaubwürdig? Alle ignoriert, es liegt an euch, ich bin raus.

 
Alexey Navoykov:

Glaubt man den obigen Ergebnissen von Igor, so ist das Gegenteil der Fall.

Ich glaube mir selbst nicht, ich überprüfe mich immer, ich glaube nicht, dass Sie mein Selbstwertgefühl steigern müssen... Es gab verschiedene Fälle in der Geschichte, ich werde einen Napoleon finden, und dann geht's los! ))))


Alexey Navoykov:
Es ist seltsam, aber früher hat der Mann das Gegenteil erreicht.

Warum habe ich srand(GetTickCount()) zu meinem Test hinzugefügt? ?

;)