Ich schreibe eine Ruby-Erweiterung und verwende die Funktion Data_wrap_struct
.
Um an Rubys Mark-and-Sweep-Speicherbereinigungsprozess teilzunehmen, muss ich eine Routine definieren, um meine Struktur freizugeben, und eine Routine, um Referenzen von meiner Struktur auf andere Strukturen zu markieren. Ich übergebe die klassische free
-Funktion, um den Speicher freizugeben, aber ich weiß nicht, wie man eine Markierungsfunktion benutzt.
meine Strukturen klingen so
%Vor% Ich denke, dass ich eine Markierungsfunktion brauche, um die Referenzen in collection
von Struktur B zu markieren.
Jemand kann mir ein Beispiel zeigen, um zu sehen, wie eine Mark-Funktion funktioniert?
Die Markierungsfunktion wird verwendet, um alle Ruby-Objekte zu markieren, die Ihre C-Struktur besitzt.
%Vor%Wenn das Objekt, das Ihrer Struktur gehört, nicht markiert ist, könnte der Garbage Collector es durchgehen und Ihr Code könnte versuchen, ein finalisiertes Objekt zu verwenden.
Tags und Links ruby c ruby-c-extension