[c++] جمع القمامة المكتبات في C ++ [مغلق]


3 Answers

بوست لديه مجموعة كبيرة من المؤشرات الذكية التي إمبليمنت العد إشارة أو حذف على نطاق الخروج أو العد التنازلي التدخلية. وقد أثبتت هذه ما يكفي لتلبية احتياجاتنا. زائد كبير هو أنه كل الحرة، مفتوحة المصدر، قالب C ++. لأنه عد إشارة، في معظم الحالات هو حتمية للغاية عندما يحصل على تدمير جسم.

Question

ما هي المكتبات المجانية والتجارية لجمع القمامة متاحة ل C ++، وما هي إيجابيات وسلبيات كل منها؟

أنا مهتم في الدروس التي تم الحصول عليها بشق الأنفس من الاستخدام الفعلي في هذا المجال، وليس التسويق أو الترويجية بلورب.

ليس هناك حاجة للتفصيل حول المقايضات المعتادة المرتبطة جمع القمامة التلقائي، ولكن يرجى ذكر الخوارزميات المستخدمة (العد المرجعي، علامة واكتساح، تدريجية، وما إلى ذلك) وتلخص بإيجاز العواقب.




يمكنني استخدام بوم-غ الكثير. فمن مباشرة إلى الأمام للاستخدام، ولكن الوثائق هي في الحقيقة سيئة. هناك صفحة C ++، ولكن من الصعب جدا العثور عليها.

في الأساس، أنت فقط تأكد من أن كل فئة ترث من فئة الأساس، وأنك دائما تمرير gc_allocator إلى حاوية. في عدد من الحالات التي تريد استخدام ليبغكب للقبض على الاستخدامات الأخرى من جديد وحذف. هذه هي تغييرات عالية المستوى إلى حد كبير، ونجد أننا يمكن إيقاف غ في وقت تجميع باستخدام #ifdef، ودعم هذا يؤثر فقط على واحد أو اثنين من الملفات.

مشكلتي الرئيسية مع ذلك هو أنه لم يعد يمكنك استخدام فالغريند، إلا إذا قمت بتشغيل جامع قبالة أولا. في حين تحول جامع قبالة من السهل القيام به، ولا يتطلب إعادة ترجمة، فمن الواضح من المستحيل استخدامه إذا كنت تبدأ في نفاد الذاكرة.




الصعوبة الرئيسية مع غ في C ++ هي الحاجة للتعامل مع الوحدات غير المتعاونة، بمعنى غ. أي التعامل مع المكتبات التي لم تكن مكتوبة أبدا مع غ في الاعتبار.

هذا هو السبب في بوم غ غالبا ما يقترح.




يمكنك أيضا استخدام ميكروسوفت C ++ المدارة. و كلر و غ هي صلبة جدا وتستخدم في منتجات الخادم، ولكن عليك استخدام أنواع كلر ل غ لجمع الواقع - لا يمكنك فقط إعادة ترجمة التعليمات البرمجية الموجودة وإزالة كافة العبارات حذف.

وأود بدلا من استخدام C # لكتابة رمز العلامة التجارية الجديدة، ولكن تمكن C ++ يتيح لك تطوير قاعدة التعليمات البرمجية الخاصة بك بطريقة أكثر تقدمية.




Related