Memoryleaks ...



  • theta schrieb:

    [EDIT]
    Und zu deinem letzdem Programm:
    Da werden einige Strings innerhalb der Schleife angelegt (auf dem Stack) und wieder zerstört. Überhaupt kein Problem.

    stimmt so nicht ganz, CStrings allokieren natuerlich Speicher auf dem Heap sobald ihnen ein String zugewiesen wird.

    Dirk



  • dbu schrieb:

    theta schrieb:

    [EDIT]
    Und zu deinem letzdem Programm:
    Da werden einige Strings innerhalb der Schleife angelegt (auf dem Stack) und wieder zerstört. Überhaupt kein Problem.

    stimmt so nicht ganz, CStrings allokieren natuerlich Speicher auf dem Heap sobald ihnen ein String zugewiesen wird.

    Dirk

    Ja, natürlich. Ausser es kommt gerade die Small String Optimization zum Einsatz (sofern implementiert). Irgendwie denke ich einfach es spielt für den Fragesteller erstmal keine Rolle. Er sollte besser erst die Grundlagen lernen.



  • Jetzt weiss ich immer noch nicht, wie das Heapmanagement arbeitet, speziell bei CString-Objekten. Gibt es Links ? Wenn ja welche ?



  • In einem Buch ( Vermutlich Petzold Visual C++ 6.0 Kapitel: "Dynamische ..." ), habe ich gelesen, dass CString ein Ärgernis darstellt , weil immer wieder kleine Speichereinheiten belegt und freigegeben werden. Und ausserdem dass Microsoft in letzter Zeit einige Verbesserungen diesbezüglich vorgenammen hat. Was wurde wie verbessert ?



  • Willst du mich verarschen?

    CStrings
    C++-Strings im Allgemeinen (steht auch einiges über Speicherverwaltung drin)
    [URL=http://lmgtfy.com/?q=C%2B%2B Heap]Generelles über den Heap[/URL]

    Warum kannst du nicht wie jeder andere auch Google verwenden? Ich hoffe, du schämst dich.



  • Ich suche ja die ganze Zeit bei Google mit den verschiedensten Begriffen. Ohne Erfolg. Ich gebe mich geschlagen, und schäme mich.



  • Das kaufe ich dir nicht ab. Allein schon beim Ausdruck 'C++-Strings' bekomme ich einiges geliefert, was mir vieles über die Speicherverwaltung verrät. Du darfst eben nicht nur die ersten zwei Einträge beachten.

    Nein, jetzt reicht es. Ich habe dir bereits geschrieben, welche Lösungen du verwenden kannst. new überladen, eigene Klassen oder externe Heap-Bibliothek. Du solltest dein Buch wegwerfen und dich mit den grundlegenden Konzepten von C++ und der Speicherverwaltung von heutigen Systemen bekannt machen. Wann du so weit bist? Bis du eine eigene Stringklasse entwickeln kannst, ist gar nicht so schwer, wenn man weiß, wie.

    Hier weitere Referenzen - dabei lernt man so viel über den Speicher und die Schreibe- und Lesealgorithmen, die jede vernünftige Stringklasse verwendet, dass du dich danach nie wieder fragen musst, wie das geht.



  • Mondschein schrieb:

    In einem Buch ( Vermutlich Petzold Visual C++ 6.0 Kapitel: "Dynamische ..." ), habe ich gelesen, dass CString ein Ärgernis darstellt , weil immer wieder kleine Speichereinheiten belegt und freigegeben werden. Und ausserdem dass Microsoft in letzter Zeit einige Verbesserungen diesbezüglich vorgenammen hat. Was wurde wie verbessert ?

    - schau dir den Quellcode an, dann wuerdest du inzwischen wissen, wie und wann CStrings Speicher auf den Heap anfordern und wann dieser wieder freigegeben wird.
    - "smal string optimierungen" gibt es zumindest in der aktuellen Implementierung, die auf den ATL-Strings basiert, nicht. "smal string optimierungen" sind z.Z. (VC++ 2010) nur in std::string zu finden.
    - "heapmanagement" ist uebrigens kein Bestandteil von CStrings sondern von Windows selbst und wurde/wird von MS in jeder Version des OS weiter optimiert. Heapfragemtierung spielt bei modernen Heapmanagern in der Praxis fast nie eine nennenswerte Rolle.

    Dirk


  • Mod

    Mondschein schrieb:

    In einem Buch ( Vermutlich Petzold Visual C++ 6.0 Kapitel: "Dynamische ..." ), habe ich gelesen, dass CString ein Ärgernis darstellt , weil immer wieder kleine Speichereinheiten belegt und freigegeben werden. Und ausserdem dass Microsoft in letzter Zeit einige Verbesserungen diesbezüglich vorgenammen hat. Was wurde wie verbessert ?

    Petzold? C++ und CString. Charles Petzold hat IMHO nie etwas über CString geschrieben.
    Such mal nach "CString Petzold" 😉 Du wirst diesen Thread finden auf Platz 1...

    Es wird soviel unsachlicher Stuss verbreitet, dass man auch diese Äußerung in diese Kategorie einordnen dürfen. Werde konkret mit Beispieln, Zitaten und Quellen...



  • Glühbirne schrieb:

    _matze schrieb:

    Glühbirne schrieb:

    Auf 32-Bit-Systemen besteht allerdings für jeden Prozess eine 4-GB-Grenze

    Unter Windows sind's ohne Tricks nur 2 GB pro Prozess.

    Ja, gut, wenn man die entsprechende Option nicht im Linker setzt oder gleich die Exe neu codiert, sind's wirklich 2 GB. 4 GB sind das Maximum an virtuellen Arbeitsspeicher, was unter 32 Bit geht.

    4 GB sind das theoretische Maximum, unter 32-Bit-Windows aber nicht möglich (da gehen maximal 3 GB). Erst unter x64 mit LAA-Flag kann ein 32-Bit-Prozess volle 4 GB verbraten. (Siehe http://msdn.microsoft.com/de-de/library/bb978906.aspx)


Anmelden zum Antworten