C++ Garbage Collector
|
عضو فعال
تاريخ التسجيل: 2005-10-11 مشاركات: 758
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
hi C++ Programmers today i'm gonna present The Garbage Collector which i've been working on these last days like in C# and Java , they had a way to clean up the program from any useless data so for my lucky i've found a very great book "The Art of C++ - Mcgraw Hill" which talk about developing a Garbage Collecter so now , after i've done it i liked to share you my GC, it's multi-threaded i've wrote a very small program to show you how to use it written under VS2005 Important NOTE: Rename the file from GC.JPG => GC.RAR , Cuz i couldn't upload it in rar extension
C++ is Not a programming language , C++ is a Way Of Life
|
| |
دخول أو تسجيل لإرسال التعليقات | قراءة: 367 |
|
عضو فعال
تاريخ التسجيل: 2006-12-10 مشاركات: 1473
الجامعة: الافتراضية الكلية: تكنولوجيا المعلومات المرحلة: متخرج
|
The pic is dead!
Edit:Sorry,didn't notice the note.
|
| |
دخول أو تسجيل لإرسال التعليقات |
تاريخ التسجيل: 2006-02-08 مشاركات: 101
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: ماجستير الاختصاص: ذكاء صنعي
|
Great idea
It seems it can solve memory leak problems
Any way one question:
in java and .net GC has another job: it moves the objects in the memory to optimize the heap allocation and to enhance the performance of GCing
Is it possible to improve your implementation so that you can do the same?
another thing: why not using C++ .net with "gcnew" operator that allocate storage on a managed heap that is garbage collected?
Thank you
اعمل لدنياك كأنك تعيش أبدا, واعمل لآخرتك كأنك تموت غدا
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2005-10-11 مشاركات: 758
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
كتب Ammar_N: in java and .net GC has another job: it moves the objects in the memory to optimize the heap allocation and to enhance the performance of GCing
Is it possible to improve your implementation so that you can do the same?
in fact i've wrote it as a layer above the basic C++ allocation method , so i think to do so what you've said i'should override the "new" operater
كتب Ammar_N: another thing: why not using C++ .net with "gcnew" operator that allocate storage on a managed heap that is garbage collected? Thank you you mean using CLR, mmm ,why not but in this way i should rewrite all my programs to support CLR 
C++ is Not a programming language , C++ is a Way Of Life
|
| |
دخول أو تسجيل لإرسال التعليقات |
تاريخ التسجيل: 2006-02-08 مشاركات: 101
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: ماجستير الاختصاص: ذكاء صنعي
|
As I can see from your implementation (but I have a quick look so I am not sure)
you are testing the objects each half a second to find the objects to be collected
So in a real world application with thousands of objects , do you think it will go perfectly without loss of performance?
Is it tested?
اعمل لدنياك كأنك تعيش أبدا, واعمل لآخرتك كأنك تموت غدا
|
| |
دخول أو تسجيل لإرسال التعليقات |
تاريخ التسجيل: 2006-09-28 مشاركات: 299
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الثالثة
|
يعني مجرد ما أعمل include لل "GCPtr" و عرف أي object عالتيملبت GCPtr لحالو بيعمل collect ؟؟
..dont limp at the disabled boulevard
|
| |
دخول أو تسجيل لإرسال التعليقات |
تاريخ التسجيل: 2005-11-29 مشاركات: 942
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الثانية
|
i know just a few about Garbage collector but isn't that like
available in some IDE's like c# or we have to make them every time
I'll code Pascal codes for food and shelter
|
| |
دخول أو تسجيل لإرسال التعليقات |
تاريخ التسجيل: 2006-02-08 مشاركات: 101
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: ماجستير الاختصاص: ذكاء صنعي
|
كتب wazzz: i know just a few about Garbage collector but isn't that like
available in some IDE's like c# or we have to make them every time
When you create an object using "new" you should release the memory it uses by calling "delete"
but if garbage collector exists it calls delete on behalf of you and when needed so you are no longer worried about it 
اعمل لدنياك كأنك تعيش أبدا, واعمل لآخرتك كأنك تموت غدا
|
| |
دخول أو تسجيل لإرسال التعليقات |
تاريخ التسجيل: 2006-05-22 مشاركات: 730
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الخامسة الاختصاص: هندسة برمجيات
|
تعودت على gc بالجافا لدرجة اني لما بكتب ++C وبيستخدم مؤشرات بنسا إعملهن Delete
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2005-10-11 مشاركات: 758
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
كتب Ammar_N: As I can see from your implementation (but I have a quick look so I am not sure)
you are testing the objects each half a second to find the objects to be collected
So in a real world application with thousands of objects , do you think it will go perfectly without loss of performance?
Is it tested?
thanks for the question.. in fact I've done GC using it's own thread with low priority,so no problem for my real-time application the main problem i faced was using a mutex to synchronous my work on the active list, so my application well wait tell the collect done to create a new object i've solved this problem by adding a new list -Dead List- so i've cleared the problem but not all any way , in this implementation , I think it gives a very good performance
C++ is Not a programming language , C++ is a Way Of Life
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2005-10-11 مشاركات: 758
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
كتب mrabooode: يعني مجرد ما أعمل include لل "GCPtr" و عرف أي object عالتيملبت GCPtr لحالو بيعمل collect ؟؟
اي متل السحر 
هو بينضاف للقائمة الميتة deadList بس ينتهي عدد العناصر هلي عم بتأشر على هاد العنصر
C++ is Not a programming language , C++ is a Way Of Life
|
| |
دخول أو تسجيل لإرسال التعليقات |
تاريخ التسجيل: 2008-03-05 مشاركات: 801
الجامعة: الافتراضية الكلية: تكنولوجيا المعلومات المرحلة: السنة الرابعة الاختصاص: غير ذلك
|
السلام عليكم ورحمة الله
سوف أقوم بوضع شرح بسيط لفكرة جامع المهملات ( GC ) في لغةC# ، و أترك التعليق للخبراء ليعطونا فكرة عن GC في C++
( الشرح من مرجع )
مقدمة بسيطة
إن أنظمة التشغيل بالإضافة إلى محركات التشغيل مثل ( محرك تشغيل اللغات المشترك CLR ) كثيرا ما تقسم الذاكرة المستعملة لتخزين البيانات إلى قطعتين منفصلتين.
تتم إدارة كل واحدة منها بأسلوب مختلف ، تسمى هاتان القطعتان من الذاكرة
المكدس ( stack ) - الكومة ( heap )
المتحولات المباشرة
عندما تصرح متحول من نوع int ( أو أي نوع مباشر ) يدعى i و تسند له القيمة 3 :
int i;

لنأخذ الآن مثال عن الأنواع المرجعية
Circle c = new Circl(3);

عندما تستدعي منهج معين ، تؤخذ الذاكرة المطلوبة لبارامتراتها و متحولاتها المحلية من المكدس ( stack ) دائما .
عندما ينتهي المنهج ( إما لأنه أنهى عمله أو لأنه رمى استثناء ) ، تفلت الذاكرة المحجوزة للبارامترات و المتحولات المحلية تلقائيا وتعود إلى المكدس ، وتصبح متوفرة ليتم استخدامها عند استدعاء منهج آخر .
عندما تنشئ كائنا ( من كلاس معين ) باستعمال new و باستدعاء التابع البناء ، تؤخذ الذاكرة المطلوبة لبناء الكائن من الكومة دائما
الفائدة من استعمال GC ( مجمع النفايات )
في C# لا يمكننا تدمير كائن بأنفسنا ، حيث لا يتوفر أي تركيب نحوي لفعل ذلك ، و ذلك لعدة أسباب قد يرتكبها المبرمج فتؤدي الى كوارث :
نسيان تدمير الكائن
يمكنتدمير كائن نشط
تدمير نفس الكائن أكثر من مرة
هذه المشاكل غير مقبولة في C# ( الأمن في مقدمة أولوياتها )
كيف يعمل مجمع النفايات GC
يشتغل GC في مسار ( thread ) خاص به و يمكنه أن يشتغل في أوقات معينة فقط ( عادة عندما يصل البرنامج الى نهاية أحد الطرق )
بينما GC يشتغل ، تتوقف مؤقتا بقية المسالك ( threads ) المشتغلة في البرنامج ، لماذا ؟
لأن GC قد يحتاج الى نقل كائنات و تحديث مراجعها ، ولا يمكنهفعل ذلك بينما تكون الكائنات قيد الاستعمال
قرأتُ مجدَكِ في قلبي و في الكُتُـبِ شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ
|
| |
دخول أو تسجيل لإرسال التعليقات |
تاريخ التسجيل: 2005-11-29 مشاركات: 942
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الثانية
|
bayrn u are so awsome
I'll code Pascal codes for food and shelter
|
| |
دخول أو تسجيل لإرسال التعليقات |
تاريخ التسجيل: 2006-02-08 مشاركات: 101
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: ماجستير الاختصاص: ذكاء صنعي
|
bayrn explanation is perfect but a little bit confusing for a new programmers who are still learning c++
since C++ uses pointers not references to allocate heap storage
اعمل لدنياك كأنك تعيش أبدا, واعمل لآخرتك كأنك تموت غدا
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2005-10-11 مشاركات: 758
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
كتب bayrn: بينما GC يشتغل ، تتوقف مؤقتا بقية المسالك ( threads ) المشتغلة في البرنامج ، لماذا ؟ لأن GC قد يحتاج الى نقل كائنات و تحديث مراجعها ، ولا يمكنه فعل ذلك بينما تكون الكائنات قيد الاستعمال
اول الشي يعطيك اخي Bayrn على الشرح القيم
بس مو معقول انو بيقوم بعملية ايقاف لجميع ال Threads بالوقت هي بيكون GC شغال
بتصور انو بيقوم بعملية قفل على العناصر المراد حذفها , انا هيك تصوري
على كل حال فيك اخي Bayrn تعطيني اسم المرجع هلي حكيت عنو , حابب طور ال GC اكتر
C++ is Not a programming language , C++ is a Way Of Life
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2006-02-27 مشاركات: 177
الجامعة: تشرين الكلية: الهندسة المعلوماتية المرحلة: متخرج الاختصاص: هندسة برمجيات
|
auto_ptr template is a GC-like method for dereferencing heap memory automatically, it's already available in C++ standard ISO/IEC:14882 as a part of STD, hope to see better techniques in the upcoming standard as well.
|
| |
دخول أو تسجيل لإرسال التعليقات |
تاريخ التسجيل: 2008-03-05 مشاركات: 801
الجامعة: الافتراضية الكلية: تكنولوجيا المعلومات المرحلة: السنة الرابعة الاختصاص: غير ذلك
|
كتب M-RAY-Y: كتب bayrn: بينما GC يشتغل ، تتوقف مؤقتا بقية المسالك ( threads ) المشتغلة في البرنامج ، لماذا ؟ لأن GC قد يحتاج الى نقل كائنات و تحديث مراجعها ، ولا يمكنه فعل ذلك بينما تكون الكائنات قيد الاستعمال اول الشي يعطيك اخي Bayrn على الشرح القيم بس مو معقول انو بيقوم بعملية ايقاف لجميع ال Threads بالوقت هي بيكون GC شغال بتصور انو بيقوم بعملية قفل على العناصر المراد حذفها , انا هيك تصوري على كل حال فيك اخي Bayrn تعطيني اسم المرجع هلي حكيت عنو , حابب طور ال GC اكتر شكرا على الموضوع ، ذكرتنا و نبهتنا لل GC الحقيقة المرجع يللي أنا جبت منه الشرح Visual C# 2005 Step by step وهو مرجع بسيط بحيث أن الشرح أردته أن يكون مفهوما لي و للمبتدئين بس الشرح كان مقتطفات من فصلين الفصل 8 الفصل 13 ولكي توضح الصورة لك الشرح الاضافي للخطوات التي يقوم بها GC : 1- يبني خريطة بكل الكائنات النافذة( التي يمكن بلوغها ) 2- يفحص ان كان أحد الكائنات غير النافذة له مدمر يجب تشغيله ( finalization ) ، كل الكائنات غير النافذة و التي تتطلب تدمير توضع في طابور ( freachable ) 3- يلغي حجز الكائنات غير النافذة المتبقية ( تلك التي لا تتطلب انهاء ) بنقل الكائنات النافذة نزولا في الذاكرة التكويمية و تحرير الذاكرة التكويمية في الأعلى بحيث أنه يحدث كل المراجع عند النقل 4- في هذه النقطة يتيح لل ( threads ) الأخرى باستئناف العمل 5- ينهي الكائنات غير النافذة التي تتطلب انهاء ( الموجودة الآن فيforeachable )في thread منفصل
قرأتُ مجدَكِ في قلبي و في الكُتُـبِ شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ
|
| |
دخول أو تسجيل لإرسال التعليقات |
تاريخ التسجيل: 2008-03-05 مشاركات: 801
الجامعة: الافتراضية الكلية: تكنولوجيا المعلومات المرحلة: السنة الرابعة الاختصاص: غير ذلك
|
Until Now I could not get the GC wich wich you are Working on it Mr.M_Ray_y , it's not found
قرأتُ مجدَكِ في قلبي و في الكُتُـبِ شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2005-10-11 مشاركات: 758
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
كتب bayrn: Until Now I could not get the GC wich wich you are Working on it Mr.M_Ray_y , it's not found
do you mean to download it
just right click on the link
save as
rename it to "GC.rar"
open it
compile it
tada !!
C++ is Not a programming language , C++ is a Way Of Life
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2005-10-11 مشاركات: 758
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
by the way guys i've added to my 3d game engine and it was very effective and there was memory leak no delete statement nothing at all yooooohooooooo
C++ is Not a programming language , C++ is a Way Of Life
|
| |
دخول أو تسجيل لإرسال التعليقات |
|