Array exceeded erkennen



  • Artchi schrieb:

    Ich will einen Beweis das vector langsamer bei lesender und schreibender funktion ist!

    nö, ist nur beim anlegen und löschen lahm.



  • Vector benutzt bei benutzung des standardallocator new, und damit ist Vector auf jeden Fall langsamer.
    Ich werd aber extra für dich noch einen test durchführen 🙄



  • Schaust du hier:http://www.infrasoft.co.at/hn/stl.htm
    Es geht dabei vor allem um das einfügen und löschen, was extrem viel Zeit verbraten tut.Beim lesen und schreiben habe ich bisher noch keinen Unterschied gemessen, müsste man mal testen.



  • Vector benutzt bei benutzung des standardallocator new, und damit ist Vector auf jeden Fall langsamer.
    Ich werd aber extra für dich noch einen test durchführen

    Auch dafür gibt's 'n dickes LOL. Weder beim lesen noch beim schreiben gibt's ein new.

    Marke:

    int foo[20];
    int * bar = new int[20];
    
    foo[13] = 6;
    bar[13] = 6;  // beide genau gleich schnell.
    
    delete bar;
    


  • otze schrieb:

    Vector benutzt bei benutzung des standardallocator new, und damit ist Vector auf jeden Fall langsamer.
    Ich werd aber extra für dich noch einen test durchführen 🙄

    Was hast du eigentlich immer mit deinem new??? 😕 Den haar genau gleichen Spruch hast du auch schon im Topic über std::string abgelassen.



  • volkard schrieb:

    Artchi schrieb:

    Ich will einen Beweis das vector langsamer bei lesender und schreibender funktion ist!

    nö, ist nur beim anlegen und löschen lahm.

    Danke, nichts anderes wollte ich hören. 🙂 Wobei das Anlegen nur innerhalb des Bereiches lahm ist. Am Ende des Vectors nicht, außer der reservierte Bereich wird überschritten. Weiß nicht warum einige Leute std::vectr meiden, wenn selbst Bjarne Stroustroup sagt, das dieser keinen Nachteil gegenüber einem Array hat. Ich pers. meide Arrays wie die Pest.



  • noproblem schrieb:

    Es geht dabei vor allem um das einfügen und löschen, was extrem viel Zeit verbraten tut.

    Du vergleichst Äpfel mit Birnen.
    Wenn häufig etwas eingefügt oder entfernt werden muss, ist ein Array/Vector die falsche Datenstruktur. Das liegt aber nicht an std::vector.



  • Gerade mal getestet 1000 * 50000 Elemente schreiben (Typ Integer)

    vector: 0,671 s
    int array:0,55 s

    Ist ja wohl auch logisch das der Zugriff auf einen natürlichen Datentypen schneller vonstatten geht.



  • @Artchi
    jep, beide benutzen den standard allocator,welcher new benutzt, und da bewiesen ist,dass allokieren aufm free store langsamer ist als wenn man über den stack geht, ist und bleibt new langsamer, wer das nicht versteht soll es selber austesten.

    achja doppelposts sind was feines^^



  • @cd9000

    Das sollte auch kein vergleich sein, sondern nur feststellen wo es am vector hapert. Mal abgesehen von den Speicherlöchern die beim resize entstehen...



  • noproblem schrieb:

    Mal abgesehen von den Speicherlöchern die beim resize entstehen...

    wtf?



  • @Shade of Mine

    Schau mal da:http://www.c-plusplus.net/forum/viewtopic.php?t=39460

    Dann siehst du was ich meine.



  • noproblem schrieb:

    Es geht dabei vor allem um das einfügen und löschen, was extrem viel Zeit verbraten tut.Beim lesen und schreiben habe ich bisher noch keinen Unterschied gemessen, müsste man mal testen.

    öhm? hö? wie kann man etwas schneller in ein array einfügen oder löschen als in einem vector? für ein array muss man das alles aufwendig selber coden. und auch dann ist der vector nur dann wesentlich langsamer wenn die grösse angepasst werden muss. und das kann man bei einem statischen array bekanntlich garnicht.



  • was willst du mir damit sagen?



  • Shade Of Mine schrieb:

    noproblem schrieb:

    Mal abgesehen von den Speicherlöchern die beim resize entstehen...

    wtf?

    so wie ich das verstehe meint er damit, dass bei einem verkleindernden resize bei einem vector der speicher nicht unbedingt wieder freigegeben wird sondern der vector diesen aus performance gründen behält... glaub ich



  • @Shade of Mine

    Ach nur das es den Anschein hatte, das du eine andere Meinung hattest.

    @japro

    Natürlich ist es aufwendiger, aber dafür auch schneller.Und von statischem Array war keine rede.



  • doch, davon war die rede.
    und zwar ging es darum, ob es besser ist einen Vector zu benutzen, wenn man weis wieviele einträge er haben wird, oder ob es besser ist, ein array zu benutzen.



  • Vom ursprünglichen Thema her gesehen natürlich schon.
    Da es aber mehr eine Streiterei über Performance vom vector ging ist da speziell keine rede von statischen Arrays gewesen.



  • noproblem schrieb:

    Gerade mal getestet 1000 * 50000 Elemente schreiben (Typ Integer)

    vector: 0,671 s
    int array:0,55 s

    Ist ja wohl auch logisch das der Zugriff auf einen natürlichen Datentypen schneller vonstatten geht.

    Warum sollte das logisch sein?

    Du hast festgestellt, dass bei deinem Compiler in einer bestimmten Version und bestimmten Compilereinstellungen bei einer bestimmten STL-Implementation der Zugriff auf einen vector langsamer ist als auf ein Array. Das sagt nicht allzuviel aus.
    IMHO sind heutige Compiler durchaus in der Lage, bei geeigneten STL-Implementierungen den Vector-Zugriff über [] in genau denselben Maschinencode umzuwandeln, wie wenn das Objekt ein C-Array wäre.



  • Beweis ???


Anmelden zum Antworten