बोहेम गार्बेज कलेक्टर

From Vigyanwiki
बोहेम-डेमर्स-वेइसर गार्बेज कलेक्टर
Other namesbdwgc
Original author(s)हंस-जुएरगेन बोहेम
Developer(s)इवान मेडांस्की, एट अल।
Stable release
8.0.6
Preview release
8.2.0
Written inC
Typeगार्बेज कलेक्टर
Licenseएक्स11 के समान (मुक्त सॉफ़्टवेयर)
WebsiteTemplate:आधिकारिक यूआरएल

बोहेम-डेमर्स-वेइज़र गार्बेज कलेक्टर (संग्राहक), जिसे प्रायः बोहेम जीसी के नाम से जाना जाता है, C और C++[1] के लिए एक रूढ़िवादी गार्बेज कलेक्टर है, जिसे हंस बोहेम, एलन डेमर्स और मार्क वेइज़र द्वारा विकसित किया गया है।[2][3]

बोहेम जीसी एक मुक्त सॉफ़्टवेयर है जो X11 लाइसेंस के समान एक अनुमेय मुक्त सॉफ़्टवेयर लाइसेंस के तहत वितरित किया जाता है। इस संग्राहक का परिचय देने वाला पहला पेपर 1992 में प्रकाशित हुआ था।[4]

डिज़ाइन

हंस बोहेम ने कलेक्टर के संचालन का वर्णन इस प्रकार किया है:

कलेक्टर एक मार्क-स्वीप एल्गोरिथ्म का उपयोग करता है। यह ऑपरेटिंग सिस्टम के अंतर्गत वृद्धिशील और पीढ़ीगत संग्रह प्रदान करता है जो सही प्रकार का वर्चुअल मेमोरी समर्थन प्रदान करता है। (वर्तमान में इसमें अलग-अलग प्रतिबंधों के साथ सनओएस[45], आईआरआईएक्स, ओएसएफ/1, लिनक्स, और विंडोज शामिल हैं।) यह किसी ऑब्जेक्ट को एकत्र करते समय अंतिम रूप देने वाले कोड को लागू करने की अनुमति देता है। यदि ऐसी जानकारी प्रदान की जाती है तो यह संकेतकों का पता लगाने के लिए प्रकार की जानकारी का लाभ उठा सकता है, लेकिन इसका उपयोग आमतौर पर ऐसी जानकारी के बिना किया जाता है।

बोहेम जीसी लीक डिटेक्शन मोड [5] में भी चल सकता है जिसमें मेमोरी प्रबंधन अभी भी मैन्युअल रूप से किया जाता है, लेकिन बोहेम जीसी जांच कर सकता है कि यह ठीक से किया गया है या नहीं। इस तरह से एक प्रोग्रामर मेमोरी लीक और डबल डीललोकेशन का पता लगा सकता है।

बोहेम जीसी को C स्ट्रिंग हैंडलिंग लाइब्रेरी के साथ भी वितरित किया जाता है जिसे कॉर्ड कहा जाता है। यह C++ (लगातार छोटे सरणियों के ट्री) में तंत्रिका के समान है, लेकिन उचित आवंटन के लिए संदर्भ गिनती का उपयोग करने के स्थान पर, यह मुक्त ऑब्जेक्ट्स के लिए गार्बेज कलेक्शन पर निर्भर करता है। कॉर्ड बहुत बड़े पाठों को संभालने, बीच में उनमें संशोधन करने, विभाजित करने, जोड़ने और परिवर्तनों का इतिहास रखने (पूर्ववत/पुनः करने की कार्यक्षमता) में अच्छे हैं।

संचालन

गार्बेज कलेक्टर अधिकांश असंशोधित सी प्रोग्रामों के साथ काम करता है, पूर्णतः Malloc() को GC_MALLOC() कॉल से बदलकर, realloc() को GC_REALLOC() कॉल से बदलकर और free() कॉल करता है।[1] नीचे दिए गए कोड का भाग दिखाता है कि कोई पारंपरिक मॉलोक के स्थान पर बोहेम का उपयोग कैसे कर सकता है और सी में मुक्त कैसे उपयोग कर सकता है।[6]

#include <assert.h>
#include <stdio.h>
#include <gc.h>

int main(void)
{
    int i;
    const int size = 10000000;

    GC_INIT();
    for (i = 0; i < size; ++i)
    {
        int **p = GC_MALLOC(sizeof *p);
        int *q = GC_MALLOC_ATOMIC(sizeof *q);

        assert(*p == 0);
        *p = GC_REALLOC(q, 2 * sizeof *p);
        if (i == size-1)
            printf("Heap size = %zu\n", GC_get_heap_size());
    }

    return 0;
}

पूर्णता के लिए, बोहेम GC_FREE() के माध्यम से स्पष्ट आवंटन रद्द करने का समर्थन करता है।[7] प्रीप्रोसेसर मैक्रोज़ का उपयोग करके सभी प्रतिस्थापन किए जा सकते हैं।

उपयोग और पोर्ट

बोहेम जीसी का उपयोग कई परियोजनाओं द्वारा किया जाता है जो इंकस्केप जैसे C या C++ में कार्यान्वित होते हैं, साथ ही क्रिस्टल, कोडन उच्च प्रदर्शन पायथन कंपाइलर,[8] जावा के लिए जीएनयू कंपाइलर सहित कई अन्य भाषाओं के लिए रनटाइम वातावरण द्वारा उपयोग किया जाता है। रनटाइम वातावरण, पोर्टेबल.नेट प्रोजेक्ट, एंबेडेबल कॉमन लिस्प, जीएनयू गुइल, माइक्रोसॉफ्ट .NET प्लेटफ़ॉर्म का मोनो कार्यान्वयन (संस्करण 2.8 के बाद से सटीक कॉम्पैक्टिंग जीसी का उपयोग भी), वैकल्पिक रूप से जीएनयूस्टेप, और libgc-d[9] (एक बाइंडिंग) D प्रोग्रामिंग भाषा के लिए libgc, जिसका उपयोग मुख्य रूप से एमसीआई में किया जाता है)। यह कई ऑपरेटिंग सिस्टम का समर्थन करता है, जिसमें कई यूनिक्स वेरिएंट (जैसे कि मैकओएस) और माइक्रोसॉफ़्ट विंडोज़ सम्मिलित हैं, और वृद्धिशील संग्रह, समानांतर संग्रह और विभिन्न प्रकार के फाइनलाइज़र सेमेन्टिक्स सहित कई उन्नत सुविधाएं प्रदान करता है।

संदर्भ

  1. 1.0 1.1 Koranne, Sandeep (2011), Handbook of Open Source Tools, Springer, pp. 151–154, Bibcode:2011hoos.book.....K, ISBN 978-1441977199.
  2. Hans Boehm, A garbage collector for C and C++
  3. Andrew W. Appel (1998), Modern Compiler Implementation in C - "Boehm Conservative Garbage Collector",
  4. H. J. Boehm and D. Chase, "A Proposal for Garbage-Collector-Safe C Compilation", The Journal of C Language Translation, Volume 4 Number 2 December 1992, pages 126-141
  5. Using the Garbage Collector as Leak Detector
  6. Using the Garbage Collector: A simple example
  7. "कचरा संग्रहकर्ता इंटरफ़ेस". www.hboehm.info.
  8. "Exaloop/Codon". GitHub.
  9. libgc-d

बाहरी संबंध