Schnelles Vergleichen von BYTE-Variablen



  • @WhiteWolf der Vector wird als dynamische Datenstruktur die Objekte wohl auch auf dem Heap speichern. Aber er kann die Objekte auch direkt verwalten. Es gibt eigentlich keinen Grund dafür die Objekte selbst zu verwalten und nur einen Pointer in dem Vektor zu speichern.



  • @WhiteWolf
    Wie ist die Zeitkomplexität deines Algos? O(n^3)?

    Wenn du eine Funktion CompareBytes() oder operator=() schreibst, wie oft wird diese aufgerufen? Und wie oft wird diese Funktion unnütz aufgerufen, weil du am Tag zuvor beispielsweise die Bytes miteinander verglichen hast und die verantwortlichen Objekte sich nicht änderten?



  • Wir hatten hier vor einer Weile mal eine ähnliche Diskussion, und das Ergebnis war, das niemand zeigen konnte, das sowas wie MMX und darüber nötig ist um die gesamte verfügbare Speicherbreite auszunutzen selbst bei langem linearem Speichervergleich. In meinen Messungen war schon von 16Bit Schritten auf 32 Bit kaum ein Unterschied zu sehen. Je kleiner die zusammenhängenen Speicherbereiche der Bytes sind um so langsamer wird es, weil der Speicherzugriff weniger effizient ist.

    Also Praxistipp, die vergleichenden Bytes linear im Speicher hintereinander anordenen zu möglichst wenigen grossen Blöcken und dann einfach irgendwie sinnvoll vergleichen wie z.b. durch memcmp. Darüber hinaus sind nur noch wenige Prozente drin, aber alles was nicht im Block liegt, ist Größenordnungen langsamer.



  • @WhiteWolf sagte in Schnelles Vergleichen von BYTE-Variablen:

    MMX

    Was willst Du mit MMX? Das ist doch nur im 32-Bit-Modus heutiger Betriebssysteme zugänglich.
    Im 64-Bit-Modus sollte man SSE verwenden.


Anmelden zum Antworten