Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Dies wird "loop unrolling" genannt und wird vom Compiler ohne OO und Templates erledigt (zumindest sollte es so sein).
Wenn man sich den Zwischencode (Assembler) ansieht, gibt es statt einer Schleife nur aufeinanderfolgende N-Operationen.
Und können Sie uns sagen, was passiert, wenn eine Funktion rekursiv aufgerufen wird?
Können Sie mir sagen, was passiert, wenn eine Funktion rekursiv aufgerufen wird?
es gibt keinen rekursiven Aufruf der Zielfunktionen :-)
Im obigen Beispiel N:=const tritt die Rekursion nur auf, wenn der Code aus einer Vorlage generiert wird und diese zugeschnitten ist. Bei der Verknüpfung besteht ein cleverer Trick darin, den const-Zyklus in eine Schablonenrekursion umzuwandeln und ihn ein cleveres Wort zu nennen
Wenn Makros Schleifen hätten, würde es so geschrieben werden
#for x=0, x<N, x++
print("x=%d",x);
#endfor
und nach dem Makroprozessor würde es sich zu einer Folge von N Prinzen entfalten. (was tatsächlich geschah, nur durch Vorlagenklassen)
Das heißt, der Trick funktioniert nur, wenn N zur Kompilierzeit bekannt ist
und es erfolgt kein rekursiver Aufruf der Zielfunktionen :-)
In dem Beispiel, das unter dem Link N:=const angegeben ist, erfolgt die Rekursion nur bei der Codegenerierung aus einer Vorlage und diese ist tail. Bei der Verknüpfung besteht ein cleverer Trick darin, den const-Zyklus in eine Schablonenrekursion umzuwandeln und ihn ein cleveres Wort zu nennen
Wenn Makros Schleifen hätten, würde es so geschrieben werden
#for x=0, x<N, x++
print("x=%d",x);
#endfor
und nach dem Makroprozessor würde es sich zu einer Folge von N Prinzen entfalten. (was tatsächlich geschah, nur durch Vorlagenklassen)
Der Trick funktioniert also nur, wenn N zur Kompilierzeit bekannt ist
Sie werden es nicht glauben, aber ich weiß, wie Vorlagen funktionieren, welches N es gibt und was das Ergebnis ist. Und meine Frage zum rekursiven Funktionsaufruf bezog sich genau auf den rekursiven Funktionsaufruf, nicht auf das Wie?
Sie werden es nicht glauben, aber ich weiß, wie Vorlagen funktionieren und was das N ist und was das Ergebnis ist. Und meine Frage zum rekursiven Funktionsaufruf bezog sich genau auf den rekursiven Funktionsaufruf, nicht auf das Wie?
Ist es eine Art "Mutprobe"? :-) Irgendwie dachte ich, dass dieses Beispiel gerade diskutiert wird... Ich habe mich geirrt :-)
Wenn der Compiler die Rekursion in einen Schwanz umwandeln kann (oder es ist explizit so, oder er wurde dazu aufgefordert), dann wird es physisch keine Rekursion geben - es wird eine Schleife machen (zurückschalten) und jede Iteration wird den vorherigen Stackframe "zertrampeln".
Ist das eine Art "Mutprobe"? :-) Irgendwie dachte ich, dass dieses Beispiel schon diskutiert wurde...ich habe mich geirrt :-)
Wenn der Compiler die Rekursion in eine Tail-Rekursion umwandeln kann (oder explizit so eingestellt ist oder dazu aufgefordert wurde), dann findet physisch keine Rekursion statt - es wird eine Schleife gebildet (zurückgeschaltet) und jede Iteration "trampelt" den vorherigen Stack-Frame.
Was hat das mit Schwäche zu tun? Nur eine Frage. Nun, nein, also nein.
Ich will mir nicht einmal die Mühe machen. Ich habe einfache Strukturen geschaffen.
Aus welchem Grund der Zugriff auf das erste Feld einer einfachen Struktur von ihrer Größe abhängt, ist mir nicht klar.
Hm. Das ist trivial - die Anzahl der Bits für die Multiplikation ist mehr)))) Vergewissern Sie sich, dass die Anzahl der Bits in der binären Darstellung der Größe der Struktur gleich ist))) Dummerweise Prozessor, sowie ein Mann, länger zu multiplizieren 1111*101 als 1111*10)
Ich werde nicht nachsehen, es gibt genug andere Aufgaben. Aber es fällt mir schwer, das zu glauben.
In ME arbeite ich mit mqh, drücke ALT+N - die Baumansicht im Navigatorfenster zeigt den Ort der Datei.
Jetzt möchte ich sie in eine offene mq5-Datei einfügen. Ich ziehe mqh aus dem Baum auf mq5, aber es wird keine entsprechende Include-Zeile erzeugt.
Ich werde nicht nachsehen, es gibt genug andere Aufgaben. Aber es fällt mir schwer, das zu glauben.
Es geht um eine kleine Struktur.
Dies ist für einen großen.
VS2019, Debug x64, in Version es inlined sie, aber die Geschwindigkeit ist die gleiche.
Der einzige Unterschied besteht in den imul-Befehlen, dem dritten Operanden, an zwei Stellen. Die Anweisung ist genau das: die Berechnung des Offsets im Array, und der dritte Operand istdie Größe der Struktur in Bytes.
Also keine Mystik - physikalische Gesetze in Aktion.
Also keine Mystik - die Gesetze der Physik sind in Kraft.
wenn Sie solche Klassen schreiben:
Nach Ihren Recherchen zu urteilen, wird die Klasse B langsamer ausgeführt, wenn Sie häufig Strukturfelder in Berechnungen verwenden?