(U) ملحقات Ruby: rb_gc_mark () ومتغيرات المثيل
-
13-09-2019 - |
سؤال
أنا أكتب امتداد روبي يحدد الفصل. إذا كنت تستخدم Data_Wrap_Struct()
لتنفيذ ردي ل rb_define_alloc_func()
, ، هل أحتاج إلى وضع علامة يدويا وتحرير متغيرات المثيل؟ أم أنها لا تزال تعامل معي؟
المحلول
سيقوم GC ل Ruby بجمع أي كائنات روبي تتم الإشارة إليها في متغيرات مثيل كائن Ruby الخاص بك. ليس لديك، ويجب ألا ينبغي أن يغير مثيل Ruby الخاص بنفسك (أي كائنات تم الوصول إليها rb_iv_set()
/ rb_iv_get()
في امتدادك).
ومع ذلك، إذا ملفوفة ج الهيكل مراجع كائنات روبي، ثم عليك تحديد تلك الموجودة في mark
رد الاتصال الذي تمر Data_Wrap_Struct()
.
(وستحتاج دائما إلى تحرير الهيكل الأساسي، والقيام بأي تنظيف آخر قد يكون ضروريا مثل إغلاق الملفات والمآخذ وما إلى ذلك في حياتك free
أتصل مرة أخرى.)
لا تنتمي إلى StackOverflow