Estoy escribiendo una extensión de Ruby y estoy usando la función Data_wrap_struct
.Data_wrap_struct y marca la función
Para participar en el proceso de recolección de elementos no utilizados de Ruby, necesito definir una rutina para liberar mi estructura, y una rutina para marcar cualquier referencia de mi estructura a otras estructuras. Paso la función clásica free
para liberar la memoria, pero no sé cómo usar una función de marca.
mis estructuras suenan como esto
typedef struct
{
int x;
int y;
} A;
typedef struct
{
A collection[10];
int current;
} B;
Creo que necesito una función de marca para marcar las referencias en collection
de estructura B.
Alguien me puede mostrar un ejemplo para ver cómo una función de marca ¿trabajos?
¿Debo marcar también objetos que no son de Ruby a los que hacen referencia otros objetos de Ruby? En mi caso, tengo un árbol de widgets creado por otras clases de Ruby (con referencias a ellos). – lzap
@Izap, no. La función 'mark' se usa para informar al recolector de basura de Ruby sobre ** objetos Ruby ** que se crearon a partir de un código externo a la máquina virtual Ruby, como una extensión C. Si tiene en sus manos un objeto Ruby que crea otros objetos nativos que no son Ruby, puede implementar una función 'free' que libera recursos una vez que el objeto Ruby es recolectado. –