vector und begin() in op[] ?



  • Hi!

    Beim Profilen ist mir grad aufgefallen, dass 10% meiner Samples vector::begin() vergeben werden, obwohl ich gar nicht begin() aufrufe. Dann ist mir aufgefallen, dass der op[] auch begin() aufruft. Jetzt mal der code der beiden Funktionen:

    // begin()
    iterator begin()
    {return (_First); }
    
    // op[]
    reference operator[](size_type _P)
    {return (*(begin() + _P));}
    

    Wie man sieht, wird begin in op[] aufgerufen. Aber begin() gibt ja nur _First zurück

    Kann man da nicht eigentlich auch das schreiben?

    reference operator[](size_type _P)
    {return (*(_First + _P));}
    

    Damit würde nämlich ein Funktionsaufruf und damit verbundener Overhead wegfallen. Wenn ja, warum hat man das nicht sowieso schon gemacht?



  • Maxi schrieb:

    Damit würde nämlich ein Funktionsaufruf und damit verbundener Overhead wegfallen. Wenn ja, warum hat man das nicht sowieso schon gemacht?

    Weil das sopwieso geinlinet wird - bzw. ist der overhead bei einem funktionsaufruf verdammt gering.



  • hm...
    Aber warum zeigt mir mein profiler dann an, dass begin() den meisten verbrauch hat, wenn sie eigentlich gar nicht aufgerufen wird?



  • Maxi schrieb:

    hm...
    Aber warum zeigt mir mein profiler dann an, dass begin() den meisten verbrauch hat, wenn sie eigentlich gar nicht aufgerufen wird?

    kompilierst du in der Debug Version?
    aber selbst wenn begin() aufgerufen werden würde - würde es weniger Zeit kosten als der Rest vom op[]. denn da hast du ja auch einen aufruf einer funktion + einer addition.

    wieso sollte also begin() länger dauern als der rest vom op[]?

    es sei denn du bist in der debug version: da kann die instanziierung eines iteratore schonmal ganz schön lange dauern.



  • ich kann doch nur in der Debug-Versin profilen, oder nicht?



  • Maxi schrieb:

    ich kann doch nur in der Debug-Versin profilen, oder nicht?

    nein.
    du musst nur profiling aktivieren. dazu braucht man aber keine debug version.

    eine debug version profilen bringt nichts - wie du siehst kosten die trivialsten sachen viel zeit und nichts passt mehr.



  • wo kann ich das einstellen?
    Hab VC6

    Wenn ich unter Projekteinstellungen -> Linker -> Profilerlauf ermöglichen

    klicke, dann versuche mit meinem profiler die DLL zu laden kommt der Fehler:

    Couldn't find codeview base address und
    Unable to open PDB

    und wenn ich noch dazu auf Debug-Info generieren klicke, kommt
    Error reading Debug-Info

    Ich hab AMD CodeAnalyst 1.2.7



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten