Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Dynamischer Speicher mit NEW und DELETE

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.12.2004, 09:25 Uhr
~Caro
Gast


Hi
Hab da mal ne Frage. Wenn ich mit NEW in meinem Programm Speicherplatz zuweise und den nicht wieder mit Delete zerstöre wird der dann automatisch beim beenden des Programms gelöscht oder bleibt der erhalten?

Gruß
Caro
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.12.2004, 10:36 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Das kommt auf das Betriebssytem an. AFAIK werden ab Windows 2000 alle vom Programm reservierten Resourcen bei dessen Ende wieder freigegeben.
Solange das Programm aber läuft bleibt er erhalten.


Trotzdem solltest du alles was dz reservierst auch wieder freigeben
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.12.2004, 16:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von Guybrush Threepwood:
Das kommt auf das Betriebssytem an. AFAIK werden ab Windows 2000 alle vom Programm reservierten Resourcen bei dessen Ende wieder freigegeben.
Solange das Programm aber läuft bleibt er erhalten.


Trotzdem solltest du alles was dz reservierst auch wieder freigeben


Unter Win wird nix mehr freigegeben... das ist ja das problem. Nur ein Debugger "löscht" die Speicherlecks normalerweise. Ansonsten bleibt der Ram belegt, irgendwann lagert das win aus da es nicht peilt das es eigentlich nur noch "müll" ist... Aber sonst macht win da nix...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.12.2004, 16:17 Uhr
Spacelord
Hoffnungsloser Fall


@Flo:
Das halte ich für ein Gerücht .....

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.12.2004, 17:38 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja ich hab davon nicht viel gemerkt, wenn ich mal absichtlich "fehlercode" gebaut hab der das delete vergisst. Er hat nach beenden des programms den ram nicht freigegeben, waren genau die 64mb die ich allokiert habe belegt. Ok wenn ich ein Programm das mehr ram braucht starte, dann checkt das win das der ram müll ist und leert in an der stelle, aber er wird vorher als belegt angezeigt
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
09.12.2004, 21:31 Uhr
ao

(Operator)



Zitat von FloSoft:
Unter Win wird nix mehr freigegeben... das ist ja das problem. Nur ein Debugger "löscht" die Speicherlecks normalerweise. Ansonsten bleibt der Ram belegt, irgendwann lagert das win aus da es nicht peilt das es eigentlich nur noch "müll" ist... Aber sonst macht win da nix...

Von welcher prähistorischen Windows-Version schreibst du da?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.12.2004, 22:31 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja das macht WinXP immer noch, man siehts an der Systemleistungsanzeige vom Taskmanager:

Programm mit "Speicherleck" von 64MB:

Vorher:
Physikalischer Speicher: V: 640876
Zugesicherter Speicher: V: 445700

Nachher:
Physikalischer Speicher: V: 575326
Zugesicherter Speicher: V: 449700

dann mit einem Ramclear-programm (Allokation von 1GB RAM + Aufräumen)

Vorher:
Physikalischer Speicher: V: 575326
Zugesicherter Speicher: V: 445700

Nachher:
Physikalischer Speicher: V: 775645
Zugesicherter Speicher: V: 245700

Da sieht man mal wie Windows mit seinem Speicher umgeht
--
class God : public ChuckNorris { };

Dieser Post wurde am 09.12.2004 um 22:32 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.12.2004, 20:25 Uhr
Spacelord
Hoffnungsloser Fall


Der Speicher ist freigegeben,nur noch nicht genullt,wodurch er in eine andere Pagingtabelle gelangt.Der Systemthread der diese Nullung durchführt läuft aber nur wenn das System Speicher benötigt oder absolut nichts anderes passiert.
Ich denke da steht schlicht und ergreifend der Gedanke hinter,das System nicht bei jeder Änderung der Pagingtabellen durch ein "Update" auszubremsen,obwohl es nicht nötig wäre.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.12.2004, 10:38 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von Spacelord:
Der Speicher ist freigegeben,nur noch nicht genullt,wodurch er in eine andere Pagingtabelle gelangt.Der Systemthread der diese Nullung durchführt läuft aber nur wenn das System Speicher benötigt oder absolut nichts anderes passiert.
Ich denke da steht schlicht und ergreifend der Gedanke hinter,das System nicht bei jeder Änderung der Pagingtabellen durch ein "Update" auszubremsen,obwohl es nicht nötig wäre.

MfG Spacelord

Problem ist nur das dieses "Nullen" im Grunde nicht bremsen würde wenn es vernünftig implementiert wäre. Wenn dann ein Programm mehr Speicher anfordert, DANN wird das Programm in dem moment gebremst weil win dann die pagingtables updated. Wenn Win das beim beenden eines programmes machen würde, würde es einem kaum bzw nicht auffallen. Ich denke das die 2te Methode insgesamt weniger bewusst "bremst". Aber naja, kann man wohl nix machen, Win ist Win und bleibt es leider auch
--
class God : public ChuckNorris { };

Dieser Post wurde am 11.12.2004 um 10:39 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.12.2004, 14:22 Uhr
Spacelord
Hoffnungsloser Fall


Ob es nun sinnvoll ist nach jedem new/delete/Prozessende die Pagingtabellen auf den aktuellen Stand zu bringen und somit zigmal einen Algorithmus auszuführen ,der verfügbare Seiten zur Verfügung stellt,obwohl doch noch ausreichend verfügbare Seiten vorhanden sind
oder ob man damit besser wartet bis es nötig ist,ist ein streitbarer Punkt.
Allerdings ist es nicht der Punkt um den es hier geht .
Fakt ist dass ein Prozess nach seinem Ende keine Memory Leaks hinterlässt.
In dem Moment in dem der Prozess "stirbt" werden sämtliche Seiten die dem virtuellen Adressraum dieses Prozesses zugeordnet waren frei gegeben.
Auch wenn diese nicht sofort als verfügbar angezeigt werden....

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: