Hallo zusammen,
Ich bin gerade dabei mich etwas mehr über die Speicherverwaltung von Programmen zu informieren.
So wie ich das mitbekommen habe wird auf dem Heap & dem Stack gearbeitet.
Den Heap gibt es pro Prozess einmal.
Den Stack hingegen pro Thread einmal (Stimmt es dass die max. Grösse 1MB beträgt??)
Der Heap wird in 2 'Varianten' unterteilt -> Managed- & Unmanaged-Heap.
Im Managed Heap kümmert sich der Garbage Collector vom .NET Framework um die Verwaltung des Speicherbereichs.
Was ist gemeint mit (Zitat: 'Dort landen die Instanzen der Reference Types von .NET')?
Im Unmanaged Heap bearbeitet der Garbage Collector nichts.
Der Unmanaged Heap wird für folgendes gebraucht (Zitat: 'Dort bedient sich die CLR sowie die eigene .NET-Anwendung immer dann, wenn eine Win32-Ressource eingebunden wird').
Was ist damit gemeint? Bzw. was ist eine Win32 Ressource? WinApi Aufrufe? Strukturen aus der WinApi?
Die Elemente auf dem Stack werden ja - sobald die Funktion verlassen wird - zerstört.
Ist dies auch richtig so?
Irgendwo habe ich auch gelesen dass man - wenn möglich - nur auf dem Stack arbeiten soll.
_Ist das so richtig? _
Wie entsteht ein Heap-Overflow?
Ist das die Folge auf einen Memory Leak?
Soviel zu den Speicherfragen.
Der Garbage Collector ist soweit ich verstanden habe dafür da um den Managed Heap zu verwalten.
Er überprüft zyklisch (oder doch nicht?) ob er nun Speicher freigeben muss oder nicht.
Wenn ja, dann löscht er alle Referenzen die nirgendwo hin zeigen.
Wenn er dies sowieso automatisch macht, warum ist die Methode GC.Collect statisch?
Oder gibt es Fälle in denen wir selber den Speicher freigeben sollten?
Ich hoffe ihr könnt mir ein wenig Klarheit verschaffen,
oder mir ein paar gute Links geben. 😃
Grüsse