array vs vector



  • was benutzt ihr?
    Müsste Vector nicht genauso schnel sein wie arrays,
    da sie intern nichts anderes sind?



  • und in dem zusammenhang hätte ich noch eine Frage:
    ist es besser ein array mit dem Indexoperator ein oder auszulesen
    oder lieber über einen Zeiger indirekt?
    Was ist schneller oder was benutzt ihr?



  • Dir ist auch etwas zu heiss geworden, ja?



  • zum 2. beitrag

    das ist völlig egal
    da es intern sowieso in das selbe übersetzt wird

    zum ersten teil:
    ein normales c array ist schneller, aber viel weniger komfortabel
    mit vectoren wird der aktuelle index direkt mitgespeichert, man kann sie erweitern und verkleienrn wie man will, elemente rauslöschen usw.
    und alles in allem ist es nur minimal langsamer

    und wenn du wirklich ein programm schreibst solltest du an den richtigen stellen optimieren

    und c arrays statt vectoren zu benutzen ist absolut nicht die richtige stelle...



  • was wären denn die richten Stellen
    bzw wo muss ich aufpassen bei geschwindigkeit?
    was sollte man tun und was nicht?
    könnt ihr mir da paar tipps geben



  • wenn dein Array >1.000.000 Elemente hat und du es sortieren willst. Idealerweise keine Zahlen, sondern benutzerdefinierte Objekte



  • Skym0sh0 schrieb:

    ein normales c array ist schneller

    wieso sollte das so sein?

    mit vectoren wird der aktuelle index direkt mitgespeichert, man kann sie erweitern und verkleienrn wie man will, elemente rauslöschen usw.
    und alles in allem ist es nur minimal langsamer

    aber die laenge muss ich mir bei einem c array genauso merken...



  • Shade Of Mine schrieb:

    Skym0sh0 schrieb:

    ein normales c array ist schneller

    wieso sollte das so sein?

    beim zugriff mit [] wars glaub ich eine Operation mehr im Assemblercode



  • mit vectoren wird der aktuelle index direkt mitgespeichert, man kann sie erweitern und verkleienrn wie man will, elemente rauslöschen usw.
    und alles in allem ist es nur minimal langsamer

    aber die laenge muss ich mir bei einem c array genauso merken...[/quote]

    nein ich meine die aktuelle grösse, nicht den index

    und das hat halt den vorteil dass man einen vector an eine funktio übergeben kann ohne noch dazu die grösse...



  • Ich denke man sollte erstmal gar nicht auf Geschwindigkeit optimieren, wenn man nicht in einem speziellen Bereich programmiert wo das nötig ist. Das kann man später meist immer noch, wenns irgendwo an einer Stelle tatsächlich einen Flaschenhals gibt.

    MfG



  • also damit er noch ne regel hat:
    Verwende immer Vector wo möglich ( statt array)



  • asmcode schrieb:

    Shade Of Mine schrieb:

    Skym0sh0 schrieb:

    ein normales c array ist schneller

    wieso sollte das so sein?

    beim zugriff mit [] wars glaub ich eine Operation mehr im Assemblercode

    Begruendung?



  • Shade Of Mine schrieb:

    asmcode schrieb:

    Shade Of Mine schrieb:

    Skym0sh0 schrieb:

    ein normales c array ist schneller

    wieso sollte das so sein?

    beim zugriff mit [] wars glaub ich eine Operation mehr im Assemblercode

    Begruendung?

    Das ist das " inline " 😃 🤡



  • asmcode schrieb:

    Shade Of Mine schrieb:

    Skym0sh0 schrieb:

    ein normales c array ist schneller

    wieso sollte das so sein?

    beim zugriff mit [] wars glaub ich eine Operation mehr im Assemblercode

    Zugriffe mit Zeigersyntax sind übrigens, für den Compilierer, wesentlich schwerer zu optimieren...



  • David_pb schrieb:

    Zugriffe mit Zeigersyntax sind übrigens, für den Compilierer, wesentlich schwerer zu optimieren...

    Begruendung?



  • Shade Of Mine schrieb:

    David_pb schrieb:

    Zugriffe mit Zeigersyntax sind übrigens, für den Compilierer, wesentlich schwerer zu optimieren...

    Begruendung?

    Weil der Compiler, ohne aufwendige Analyse, nicht genau weiß wohin durch den Zeiger geschrieben wird. Das schließt dann z.B. aliasing oder unbeschreibbaren Speicher ein. Damit ist es dann ziemlich schwer für den Optimierer, zu entscheiden an welcher Stelle optimiert werden soll.
    Beim []-Operator gibts diese Annahmen nicht, da ist klar wohin geschrieben wird und aliasing kann ausgeschlossen werden.

    Ist aber natürlich nicht zu verallgemeinern. Es kann Fälle geben bei denen die Zeigersyntax besser ist.



  • David_pb schrieb:

    Beim []-Operator gibts diese Annahmen nicht, da ist klar wohin geschrieben wird und aliasing kann ausgeschlossen werden.

    😮



  • David_pb schrieb:

    Shade Of Mine schrieb:

    David_pb schrieb:

    Zugriffe mit Zeigersyntax sind übrigens, für den Compilierer, wesentlich schwerer zu optimieren...

    Begruendung?

    Weil der Compiler, ohne aufwendige Analyse, nicht genau weiß wohin durch den Zeiger geschrieben wird. Das schließt dann z.B. aliasing oder unbeschreibbaren Speicher ein. Damit ist es dann ziemlich schwer für den Optimierer, zu entscheiden an welcher Stelle optimiert werden soll.
    Beim []-Operator gibts diese Annahmen nicht, da ist klar wohin geschrieben wird und aliasing kann ausgeschlossen werden.

    Ist aber natürlich nicht zu verallgemeinern. Es kann Fälle geben bei denen die Zeigersyntax besser ist.

    Hmm, wird hinter dem operator[] nicht auch nur ein Zeiger dereferenziert? Also beim Vektor meine ich.



  • Beim vector kann das sein. Weiß nicht in wie weit der Standard vorschreibt wie genau auf die internen Daten zugegriffen wird.



  • David_pb schrieb:

    Weil der Compiler, ohne aufwendige Analyse, nicht genau weiß wohin durch den Zeiger geschrieben wird. Das schließt dann z.B. aliasing oder unbeschreibbaren Speicher ein. Damit ist es dann ziemlich schwer für den Optimierer, zu entscheiden an welcher Stelle optimiert werden soll.
    Beim []-Operator gibts diese Annahmen nicht, da ist klar wohin geschrieben wird und aliasing kann ausgeschlossen werden.

    Ist aber natürlich nicht zu verallgemeinern. Es kann Fälle geben bei denen die Zeigersyntax besser ist.

    Und wer hat dir den quark erzählt?

    a[b] == *(a+b) == *(b+a) == b[a]

    fuer alle diese Ausdrücke wird jeder intelligente Compiler exakt den selben Code generieren.


Anmelden zum Antworten