Ist Klasse mit new oder new[] erzeugt worden??



  • Hi,
    Ich wuerde gerne testen, ob eine bestimmte Klasse mit den operatoren new oder new[] erzugt worden ist. Wenn möglich ohne die Selbigen zu überschreiben.
    Im Notfall wäre das mein weg.
    Gibt es einen Weg heraus zu finden, wie der Speicher für die jeweilige klasseninstanz alloziiert wurde ??
    l.g. Alex



  • Nein.

    Wozu brauchst Du das?



  • Hi Sebsatian
    Ich schreib an ner Klasse die Matrizen effizient speichern soll. (Dünnbesetzt und einfachverkettet). Ich will eine Funktion garbagecollect haben, welche, wenn man sie bei der letzten Instanz der KLasse aufruft, sämtliche Matrizen vom Speicher nimmt. Wobei ich new und delete so oder so überladen muß, um die Auslagerung ordentlich in den griff zu bekomen.

    Danke für Antwort



  • seit wann verwalten sich matrizen selber? und das noch durch ne liste?

    std::vector<Matrix> reicht doch?



  • 🙂 So einfach ists nicht ggg
    Das ist viel zu ineffektiev. Werde es mit new und delet überladen lösen
    Gruß



  • Alexander Kiebler schrieb:

    🙂 So einfach ists nicht ggg
    Das ist viel zu ineffektiev. Werde es mit new und delet überladen lösen
    Gruß

    🙄



  • Alexander Kiebler schrieb:

    🙂 So einfach ists nicht ggg
    Das ist viel zu ineffektiev. Werde es mit new und delet überladen lösen
    Gruß

    Ich nehme ganz stark an, das du dich weder mit der Performance der STL auskennst, noch die boost-Bibliothek kennst.

    Und um eine weitere Option zu nennen: boost::ptr_vector



  • Wie wäre es mit einem custom allocator???????????????????????????



  • Alexander Kiebler schrieb:

    🙂 So einfach ists nicht ggg
    Das ist viel zu ineffektiev. Werde es mit new und delet überladen lösen
    Gruß

    hihi. das kenne ich. man überlegt rum und rum und nix gefällt einem. aber wenn man es einem anderen erzählt, fällt einem die lösung ein.

    tips:

    new/delete in einer nur dazu da seienden basisklasse überladen, statt das globale new/delete anzufassen.

    void delete(void*,size_t) überladen und die compilermagie ausnutzen! damit meine ich !!. dazu war auch die klasse da.

    delete inline machen, damit das switch(size) nebst compilermagie zu nullkosten zum allocator<24>::free führt.

    placement new/delete benutzen mit einem memeory pool, also
    {
    memorypool mp1;
    Matrix* m1=new(mp) Matrix(3,4);
    Matrix* m2=new(mp) Matrix(4,4);
    Matrix* m3=new(mp) Matrix(3,3);
    }//mp1 verschwindet und mit ihm der ganze speicher, oh, jeah!

    doch nicht new/delete überladen und eine freiliste der knoten als statisches member in Matrix führen.

    das erst machen, wenn du ein meßprogramm hast, das eine typische rechnung ausführt. verbesserungen in den zugriffen oder besser einsparungen von zugriffen in die dünn besetzten matrix sind das Α und Ω, schätze ich. performantes memory management beschleunigt ein programm dagegen maximal um faktor 100.

    es würde mich freuen, wenn du, wenn du mit deinen sachen dann zufrieden bist, die schönsten ideen vorstellen würdest.



  • weiterer tipp: std::deque mit eigenem allocator verwenden. Oder den Allocator weglassen, deque hat schon ziemlich krass gutes Memorymanagement.


Anmelden zum Antworten