/ / (U) Ruby Extensions: rb_gc_mark () et variables d'instance - c, ruby, ruby-c-extension, mark-and-sweep

(U) Extensions Ruby: rb_gc_mark () et variables d'instance - c, ruby, ruby-c-extension, mark-and-sweep

J'écris une extension ruby ​​qui définit une classe. Si j'utilise Data_Wrap_Struct() mettre en œuvre mon rappel pour rb_define_alloc_func(), dois-je marquer et libérer manuellement les variables d'instance? Ou est-ce toujours traité pour moi?

Réponses:

7 pour la réponse № 1

Ruby "s GC collectera tous les objets Ruby qui sontréférencé dans les variables d’instance de votre objet Ruby. Vous n’avez pas à et ne devez pas libérer les variables d’instance Ruby vous-même (c’est-à-dire tout objet accédé avec rb_iv_set() / rb_iv_get() dans votre extension).

Cependant, si le emballé C struct référence des objets Ruby, vous devrez alors marquer ceux-ci dans le mark rappel que vous passez à Data_Wrap_Struct().

(Et vous devrez toujours libérer la structure sous-jacente et effectuer tout autre nettoyage nécessaire, tel que la fermeture de fichiers, de sockets, etc. dans votre ordinateur. free rappeler.)