बोहेम गार्बेज कलेक्टर
Other names | bdwgc |
---|---|
Original author(s) | Hans-Juergen Boehm |
Developer(s) | Ivan Maidanski, et al. |
Initial release | 1988 |
Stable release | 8.0.6
/ September 28, 2021 |
Preview release | 8.2.0
/ September 29, 2021 |
Written in | C |
Type | garbage collector |
License | similar to X11 (free software) |
बोहेम-डेमर्स-वेइज़र गार्बेज कलेक्टर, जिसे अक्सर बोएहम जीसी के नाम से जाना जाता है, C और C++[1] के लिए एक रूढ़िवादी कचरा संग्राहक है, जिसे हंस बोएहम, एलन डेमर्स और मार्क वेइज़र द्वारा विकसित किया गया है।[2][3]
बोएहम जीसी एक मुक्त सॉफ़्टवेयर है जो X11 लाइसेंस के समान एक अनुमेय मुफ़्त सॉफ़्टवेयर लाइसेंस के तहत वितरित किया जाता है। इस संग्राहक का परिचय देने वाला पहला पेपर 1992 में प्रकाशित हुआ था।[4]
डिज़ाइन
हंस बोहम कलेक्टर के संचालन का वर्णन इस प्रकार करते हैं:
The collector uses a mark-sweep algorithm. It provides incremental and generational collection under operating systems which provide the right kind of virtual memory support. (Currently this includes SunOS[45], IRIX, OSF/1, Linux, and Windows, with varying restrictions.) It allows finalization code to be invoked when an object is collected. It can take advantage of type information to locate pointers if such information is provided, but it is usually used without such information.
Boehm GC स्मृति रिसाव मोड में भी चल सकता है[5] जिसमें मेमोरी प्रबंधन अभी भी मैन्युअल रूप से किया जाता है, लेकिन बोहेम जीसी जांच कर सकता है कि यह ठीक से किया गया है या नहीं। इस तरह एक प्रोग्रामर मेमोरी लीक और डबल डीलोकेशन का पता लगा सकता है।
बोहेम जीसी को सी स्ट्रिंग हैंडलिंग लाइब्रेरी के साथ भी वितरित किया जाता है जिसे कॉर्ड कहा जाता है। यह 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.0 1.1 Koranne, Sandeep (2011), Handbook of Open Source Tools, Springer, pp. 151–154, Bibcode:2011hoos.book.....K, ISBN 978-1441977199.
- ↑ Hans Boehm, A garbage collector for C and C++
- ↑ Andrew W. Appel (1998), Modern Compiler Implementation in C - "Boehm Conservative Garbage Collector",
- ↑ 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
- ↑ Using the Garbage Collector as Leak Detector
- ↑ Using the Garbage Collector: A simple example
- ↑ "कचरा संग्रहकर्ता इंटरफ़ेस". www.hboehm.info.
- ↑ "Exaloop/Codon". GitHub.
- ↑ libgc-d
बाहरी संबंध
- No URL found. Please specify a URL here or add one to Wikidata.
- बोहेम गार्बेज कलेक्टर on SourceForge
- Git repo for BoehmGC development on GitHub
- Transparent Programmer-Directed Garbage Collection for C++, Hans-J. Boehm and Michael Spertus
- Dr. Dobbs The Boehm Collector for C and C++, Gene Michael Stover, March 01, 2003