Wie weit kann Speicherverluste gehen?

Ich habe laufen in den Speicher-Lecks viele Male. In der Regel, wenn ich malloc-ing als gäbe es kein morgen, oder baumelnd FILE *s wie schmutzige Wäsche. Ich in der Regel davon ausgehen (lies: hoffe verzweifelt), dass alle Speicher bereinigt wird, zumindest wenn das Programm beendet wird. Gibt es irgendwelche Situationen, in denen die Speicherbelegung wird nicht erhoben, wenn das Programm beendet wird oder abstürzt?

Wenn die Antwort variiert stark von Sprache zu Sprache, dann konzentrieren wir uns auf C(++).

Bitte beachten hyperbolischen Verwendung der phrase "als gäbe es kein morgen', und 'baumeln ... wie schmutzige Wäsche". Unsicher* malloc*ing weh tun können die, die Sie lieben. Auch, verwenden Sie bitte Vorsicht mit schmutziger Wäsche.

  • Wenn Sie mit einem "modernen" OS wie Linux oder Windows, dann das OS selbst wird lösen Sie alle nicht freigegebenen Speicher, wenn das Programm beendet ist.
  • Statt malloc-ing als gäbe es kein morgen, versuchen Sie vorgeben, es gibt ein morgen und halten Sie Ihr Gedächtnis!
  • ah, Sie sagen also, man sollte calloc als gäbe es kein morgen. Ausgezeichnet.
  • "Wenn die Antwort variiert stark von Sprache zu Sprache, dann läßt sich auf c(++)." c und c++ sind nicht die gleiche Sprache!
  • "alle Erinnerung ist aufgeräumt, wenn das Programm beendet" - Durch die Programmierung der Weise, die Sie beschrieben, die Sie ausführen würden, aus dem Speicher schneller, als Sie denken, Sie würden. Beachten Sie, dass Sie nicht immer die Arbeit auf Anwendungen, die ausgeführt wird, nur für ein paar Minuten... Sobald Sie anfangen, die Zusammenarbeit auf einige ernsthafte Projekte, werden Sie erkennen die Bedeutung des korrekten Speicher-management.
  • Ich denke, die Frage ist mehr über die when working in short-lived applications, does memory management matters?
  • Mein Punkt ist, dass es in der ordnungsgemäßen Verwaltung und keine Speicherverluste immer, wenn möglich, egal, welche Art von Projekt es ist.
  • Kommentar zu C und C++ werden verschiedene Sprachen verbirgt sich mehr, als Sie denken... In C++, Sie werden ziemlich finden sich unter Ausnutzung von Objekten mit automatischer Speicherung-Dauer, - Folgen RAII-idiom... Sie lassen diese Objekte kümmern sich um die Speicherverwaltung für Sie.
  • Wenn Sie nicht möchten, um Ihre Speicher von hand, suchen Sie sich ein garbage collector, wie Boehm ' s.
  • Was über COM-Objekte? Ich habe gelesen Sie werden nicht freigegeben, wenn Sie vergessen haben, rufen release auf Sie, auch nachdem die Anwendung geschlossen.
  • Ich Frage mich, was die Leute von security.stackexchange.com würde sagen, über dieses...
  • Es ist nicht genau die Antwort auf deine Frage, aber ich möchte Ihnen in diesem Artikel Wenn Linux Läuft Out-of-Memory Lesen sehr hilfreich...
  • Wenn ich das richtig verstehe, ist dies einer der wichtigsten Gründe, warum Windows NT/2000/XP/Vista/8 sind so viel stabiler als Windows 95/98/ME waren: die 95-kernel war nicht in der Lage zu bereinigen nach apps sehr gut (wenn überhaupt?) so ein Programm verrückt und stürzt, könnte leicht bringen das ganze system.
  • In C++, es ist besser, verwenden Sie die STL-Containern, wo immer möglich, anstatt neue und löscht. Die STL-Container reinigen sich gut selbst.
  • Verwandte Frage: stackoverflow.com/questions/1060160/...

Schreibe einen Kommentar