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
Im zweiten Fall erfolgt der Zugriff indirekt über einen Verweis, der in einem mikroskopisch kleinen Schleifenkörper natürlich die Hälfte der Zeit in Anspruch nimmt und sie verdoppelt.
Ich denke, dies ist nur eine Optimierung des ersten Falls des direkten Zugriffs auf ein Objektmitglied.
Im zweiten Fall haben wir einen indirekten Zugriff über einen Verweis, der natürlich die Hälfte der Zeit benötigt, wobei ein mikroskopischer Schleifenkörper die Zeit um das Doppelte erhöht.
Renat, in der realen Welt werden große Datenmengen verarbeitet. Ich habe den Test bereits vereinfacht, um den Problembereich zu verdeutlichen. Ursprünglich habe ich ihn mit meinen eigenen Arrays und Klassen erstellt. Dann habe ich es auf ein Schema reduziert.
d.h. wir haben eigentlich nicht nur ein arr-Objekt, sondern ein Array von komplexen Objekten (auch mit Arrays).
Dies lässt sich im Schema grob wie folgt ausdrücken
Ich habe mir überlegt, dass ich, wenn ich einen Verweis auf ein bestimmtes Array-Element A
Die Arbeit mit den Parametern A::prmX wird schneller sein.
Aber es stellt sich heraus, dass das Ziehen einer Wurst aus Array-Namen
_b[i]._a[j].prmX
wäre mindestens doppelt so schnell wie der Verweis auf ein bestimmtes Element.
Das hat mich ein wenig überrascht, und es ist klar, dass der Kernel eine Art Pseudo-Zeiger erhält.
Gibt es eine Möglichkeit, die Geschwindigkeit zu optimieren, so dass der Geschwindigkeitsunterschied zumindest verringert wird?
So wird es ohne Fehler sein
Bei diesem Test werden keine Fehler auf diese Weise auftreten. Aber diese Methode löst nicht die Hauptfrage: Warum überspringt der Compiler die Umwandlung einer konstanten Objektreferenz in eine Nicht-Konst-Referenz und erzeugt keinen Fehler und/oder keine Warnung? Wenn es sich um eine solche Funktion handelt, keine Frage, aber in diesem Fall geht die Bedeutung des Modifikators const für den zurückgegebenen Typ in der Signatur von Klassenmethoden verloren.
Für mich ergibt alles einen Sinn.
Die konstanten Objektfunktionen sollten das Objekt selbst nicht verändern, also sollten sie auch einen const-Modifikator haben
und über
//Ошибки нет. Это НЕ правильно(CONST A* B::getA())! A* a2 = b.getA();
Nun, ja, das wird in C++ nicht funktionieren.
Schreiben Sie an servicedesk.
Aber es stellt sich heraus, dass das Ziehen einer Wurst aus Array-Namen
ist mindestens doppelt so schnell wie der Zugriff auf ein bestimmtes Objekt.
Ist es wirklich schneller, oder ist es eine logische Konstruktion der Ausgabe, die auf anderen, einfacheren Fällen basiert?
Meiner Meinung nach ist ein sauberer Beweis, der auf dem vorgestellten Zugriff auf ein mehrdimensionales Array basiert, noch nicht vorgelegt worden. Vor allem, wenn man bedenkt, dass die teure Zusatzfunktion GetPointer vorhanden ist.
Das hat mich ein wenig überrascht, und es wurde klar, dass im Kernel eine Art Pseudo-Indexierung stattfindet.
Gibt es eine Möglichkeit, die Geschwindigkeit zu optimieren, so dass der Geschwindigkeitsunterschied zumindest verringert wird?
Wir arbeiten ständig an der Optimierung, aber im Falle von Referenzen/Handles gibt es einen System-Overhead bei indirektem Zugriff.
Wie auch immer, lassen Sie uns die Optimierung eines solchen Zugangs näher betrachten.
Ist es wirklich schneller oder ist es eine logische Konstruktion der Schlussfolgerung, die auf anderen, einfacheren Fällen beruht?
Ja, das ist ziemlich realistisch. Ich habe es beim Füllen meiner Arrays getestet. Es war immer doppelt so langsam.
Meines Erachtens ist ein sauberer Beweis auf der Grundlage des vorgestellten mehrdimensionalen Array-Zugriffs noch nicht vorgelegt worden.
Nun, ich habe das Schema und ein Bild der Klassen A, B und Arrays erstellt.
Vor allem mit der recht teuren Zusatzfunktion GetPointer.
Sie wird einmal vor dem Eintritt in eine Schleife aufgerufen, aber im Prinzip kann man sie für einen genaueren Test auch außerhalb von GetTickCount verwenden
OK. Danke. Das ist genau das, was wir brauchen.
Sie wird einmal vor dem Eintritt in die Schleife aufgerufen, aber im Prinzip könnte man sie für einen genaueren Test auch außerhalb von GetTickCount verwenden
Eine Anregung. Kann die Text-Zoom-Funktion in die Hilfe aufgenommen werden, z. B. + oder - oder Strg+Mausrad.
Das ist wahrscheinlich nicht möglich. Ist die Online-Version nicht geeignet?
Das habe ich im Internet zu diesem Thema gefunden - http://forum.ru-board.com/topic.cgi?forum=62&topic=20907
UPDate Mehr http://forum.ixbt.com/topic.cgi?id=23:39211