Junior — Middle
Welke soorten geheugenlekken kunnen optreden bij het beheer van dynamisch geheugen?
sobes.tech AI
Antwoord van AI
Bij het beheer van dynamisch geheugen kunnen de volgende typen geheugenlekken optreden:
- Lek door vergeten referenties: objecten blijven in het geheugen omdat er nog steeds referenties naar hen zijn, ook al zijn ze niet meer nodig.
- Cyclische referenties: objecten verwijzen naar elkaar, en de garbage collector kan ze niet vrijmaken als hij geen cyclustelling ondersteunt.
- Niet vrijgegeven unmanaged bronnen: als in C# unmanaged bronnen (bijvoorbeeld descriptors, bestanden) worden gebruikt en niet expliciet worden vrijgegeven via
Disposeof finalizers.
Voorbeeld van een lek door een cyclus:
class Node {
public Node Next;
}
Node a = new Node();
Node b = new Node();
a.Next = b;
b.Next = a; // cyclus
// Als de garbage collector geen cyclustelling ondersteunt, worden de objecten niet vrijgegeven
Om lekken te voorkomen, is het belangrijk om referenties correct te beheren en unmanaged bronnen vrij te geven.