बोहेम गार्बेज कलेक्टर: Difference between revisions

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


== ऑपरेशन ==
== संचालन ==


गार्बेज कलेक्टर अधिकांश असंशोधित सी प्रोग्रामों के साथ, बस प्रतिस्थापित करके काम करता है {{tt|malloc()}} साथ {{tt|GC_MALLOC()}} कॉल, प्रतिस्थापित करना {{tt|realloc()}} साथ {{tt|GC_REALLOC()}} कॉल, और हटाना {{tt|free()}} कॉल करता है.<ref name="Koranne2011"/>नीचे दिए गए कोड का टुकड़ा दिखाता है कि कोई पारंपरिक [[मॉलोक]] और सी में फ्री के बजाय बोहेम का उपयोग कैसे कर सकता है।<ref>[http://www.hboehm.info/gc/simple_example.html Using the Garbage Collector: A simple example<!-- Bot generated title -->]</ref>
गार्बेज कलेक्टर अधिकांश असंशोधित सी प्रोग्रामों के साथ काम करता है, पूर्णतः Malloc() को GC_MALLOC() कॉल से बदलकर, realloc() को GC_REALLOC() कॉल से बदलकर और free() कॉल करता है।<ref name="Koranne2011"/> नीचे दिए गए कोड का भाग दिखाता है कि कोई पारंपरिक मॉलोक के स्थान पर बोहेम का उपयोग कैसे कर सकता है और सी में मुक्त कैसे उपयोग कर सकता है।<ref>[http://www.hboehm.info/gc/simple_example.html Using the Garbage Collector: A simple example<!-- Bot generated title -->]</ref>
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
#include <assert.h>
#include <assert.h>

Revision as of 08:47, 18 July 2023

Boehm–Demers–Weiser Garbage Collector
Other namesbdwgc
Original author(s)Hans-Juergen Boehm
Developer(s)Ivan Maidanski, et al.
Initial release1988; 36 years ago (1988)
Stable release
8.0.6 / September 28, 2021; 3 years ago (2021-09-28)
Preview release
8.2.0 / September 29, 2021; 3 years ago (2021-09-29)
Written inC
Typegarbage collector
Licensesimilar to X11 (free software)

बोहेम-डेमर्स-वेइज़र गार्बेज कलेक्टर (संग्राहक), जिसे अक्सर बोएहम जीसी के नाम से जाना जाता है, 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] सभी प्रतिस्थापन प्रीप्रोसेसर मैक्रोज़ का उपयोग करके किया जा सकता है।

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

बोहेम जीसी का उपयोग कई परियोजनाओं द्वारा किया जाता है जो इंकस्केप जैसे सी या सी ++ में कार्यान्वित होते हैं, साथ ही क्रिस्टल (प्रोग्रामिंग भाषा), कोडन उच्च प्रदर्शन पायथन कंपाइलर सहित कई अन्य भाषाओं के लिए रनटाइम वातावरण में उपयोग किया जाता है।[8] जावा रनटाइम वातावरण के लिए जीएनयू कंपाइलर, पोर्टेबल.नेट प्रोजेक्ट, एंबेडेबल कॉमन लिस्प, जीएनयू गुइल, माइक्रोसॉफ्ट .NET प्लेटफॉर्म का मोनो (सॉफ्टवेयर) कार्यान्वयन (संस्करण 2.8 के बाद से सटीक कॉम्पैक्टिंग जीसी का उपयोग भी), जीएनयूस्टेप वैकल्पिक रूप से, और libgc- डी[9] (डी प्रोग्रामिंग भाषा के लिए 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


बाहरी संबंध