Ich möchte ein Array von Elementen aus dem Garbage-Collected-Heap zuweisen und auf diese Elemente nur über rohe Zeiger zugreifen. Kann der Garbage Collector diesen Speicherblock zurückgewinnen, nachdem (und nicht vorher) alle Zeiger, die auf ihn zeigen, den Gültigkeitsbereich verlassen haben?
Ich dachte daran, es so zu machen:
%Vor%Ihr Szenario wird funktionieren.
Zwei Dinge:
Es ist erwähnenswert, dass innere Zeiger die Markierungsphase des Garbage Collectors erheblich verlangsamen, aber in einer Systemsprache wie D wäre es nicht sinnvoll, interne Zeiger nicht zu unterstützen.
Beachten Sie schließlich, dass wenn Sie einen Zeiger auf GC-allokierten Speicher außerhalb des GC-Heaps und des Stacks / Registers speichern, nicht vom GC erkannt wird. Das heißt, wenn Sie das .ptr
eines Arrays in einem% code speichern und dann alle Referenzen wegwerfen, wird es beispielsweise nicht als live betrachtet.
Tags und Links arrays garbage-collection d heap-memory d2