डेटा सेगमेंट
कम्प्यूटिंग में, डेटा सेगमेंट (अधिकांशतः जिसे डेटा के रूप में दर्शाया जाता है) किसी ऑब्जेक्ट फ़ाइल का भाग या किसी प्रोग्राम का संबंधित एड्रेस स्पेस होता है जिसमें इनिशियलाइज़्ड स्टैटिक वेरिएबल्स होते हैं, अर्थात ग्लोबल वेरिएबल्स और स्टैटिक लोकल वेरिएबल्स सम्मिलित होते हैं। इस सेगमेंट का आकार प्रोग्राम के सोर्स कोड में वैल्यू के आकार से निर्धारित होता है, और रन टाइम में परवर्तित नहीं होता है ।
डेटा सेगमेंट को रीड/राइट किया जाता है, क्योंकि वेरिएबल्स के मानों को रन टाइम पर परवर्तित किया जा सकता है। यह रीड-ओनली डेटा सेगमेंट, जिसमें वेरिएबल्स के अतिरिक्त स्टैटिक कोंस्टेंट्स होते हैं; यह कोड सेगमेंट के विपरीत भी है, जिसे टेक्स्ट सेगमेंट के रूप में भी जाना जाता है, जो कई आर्किटेक्चरों पर केवल रीड करने के लिए होता है। अनइनिशियलाइज़्ड डेटा, दोनों वेरिएबल्स और कोंस्टेंट्स, इसके अतिरिक्त बीएसएस सेगमेंट में होते हैं।
ऐतिहासिक रूप से, इंटरनल एड्रेस रजिस्टर के मूल आकार से बड़े मेमोरी एड्रेस स्पेस का समर्थन करने में सक्षम होने के लिए, प्रारंभिक सीपीयू ने सेगमेंटेशन का सिस्टम प्रारंभ किया था, जिसके अंतर्गत वे कुछ क्षेत्रों में ऑफसेट के रूप में उपयोग करने के लिए इंडेक्स के छोटे सेट को स्टोर करेंगे। सीपीयू की इंटेल 8086 फैमिली ने चार सेगमेंट कोड सेगमेंट, डेटा सेगमेंट, स्टैक सेगमेंट और एक्स्ट्रा सेगमेंट प्रदान किए। प्रत्येक सेगमेंट को मेमोरी में स्पेसिफिक लोकेशन पर सॉफ्टवेयर द्वारा एक्सीक्यूट किया गया था, उन सेग्मेंट्स के भीतर डेटा पर ऑपरेटेड सभी इंस्ट्रक्शंस को उस सेगमेंट के प्रारम्भ के सापेक्ष एक्सीक्यूट किया गया था। इसने 16-बिट एड्रेस रजिस्टर की अनुमति दी, जो सामान्य रूप से 1 MB मेमोरी स्पेस एक्सेस के लिए 64 KB मेमोरी स्पेस एक्सेस में सक्षम होगा।
स्पेसिफिक टास्कस के साथ मेमोरी स्पेस को डिस्क्रीट ब्लॉकों में खंडित करना प्रोग्रामिंग लैंग्वेजेज में किया जाता है और अवधारणा अभी भी आधुनिक प्रोग्रामिंग लैंग्वेजेज में व्यापक रूप से उपयोग में है।
प्रोग्राम मेमोरी
कंप्यूटर प्रोग्राम मेमोरी को दो वर्गों में वर्गीकृत किया जा सकता है: रीड-ओनली मेमोरी और रीड/राइट मेमोरी। यह भेद प्रारंभिक प्रणालियों से विस्तारित है, जो केवल-पढ़ने के लिए मेमोरी जैसे मास्क रोम, ईपीरोम, [[प्रोग्राम करने योग्य केवल पढ़ने के लिये मेमोरी]] या ईईपीरोम में अपना मुख्य प्रोग्राम रखते हैं। जैसे-जैसे प्रणाली और अधिक जटिल होते गए और रोम से क्रियान्वित करने के अतिरिक्त अन्य मीडिया से रैम में प्रोग्राम लोड किए गए, यह विचार है कि प्रोग्राम की मेमोरी के कुछ भाग को संशोधित नहीं किया जाना चाहिए, निरंतर रखा गया था। ये प्रोग्राम के .text और .rodata सेगमेंट बन गए, और शेष जिन्हें विशिष्ट कार्यों के लिए कई अन्य सेग्मेंट्स में विभाजित करने के लिए लिखा जा सकता था।
कोड
कोड सेगमेंट, जिसे पाठ सेगमेंट के रूप में भी जाना जाता है, जिसमे निष्पादन योग्य कोड होता है और यह सामान्यतः केवल पढ़ने के लिए और निश्चित आकार का होता है।
डेटा
यह टेक्स्ट, विभिन्न डेटा और स्टैक और हीप सेक्शन के साथ साधारण कंप्यूटर की प्रोग्राम मेमोरी के विशिष्ट लेआउट को दिखाता है।
डेटा सेगमेंट में आरंभिक स्टैटिक वेरिएबल होते हैं, जैसे ग्लोबल वेरिएबल और स्थानीय स्टैटिक वेरिएबल जिनका परिभाषित मूल्य होता है और जिन्हें संशोधित किया जा सकता है। सी में उदाहरणों में सम्मलित हैं:
int i = 3; char a[] = "Hello World";
इन चरों के मान प्रारंभ में रीड-ओनली मेमोरी (सामान्यतः पर कोड सेगमेंट के भीतर) में संग्रहीत किए जाते हैं और प्रोग्राम को सुचारु रूप से डेटा सेगमेंट में कॉपी किया जाता है।
बीएसएस
बीएसएस सेगमेंट में गैर-प्रारंभिक स्थिर डेटा, वेरिएबल्स और स्थिरांक दोनों सम्मलित हैं, जैसे ग्लोबल वेरिएबल और स्थानीय स्टैटिक वेरिएबल जो शून्य से आरंभीकृत हैं या सोर्स कोड में स्पष्ट आरंभीकरण नहीं है। सी में उदाहरणों में सम्मलित हैं:
static int i; static char a[12];
हीप
हीप सेगमेंट में गतिशील रूप से आवंटित मेमोरी होती है, सामान्यतः पर बीएसएस सेगमेंट के अंत में आरम्भ होती है और वहां से बड़े स्तरों को ज्ञात करती है। यह मल्लोक, काललोक, रेआललोक (realloc), और फ्री द्वारा प्रबंधित किया जाता है, जो इसके आकार को समायोजित करने के लिए Sbrk और sbrk प्रणाली कॉल का उपयोग कर सकता है (ध्यान दें कि मल्लोक / के अनुबंध को पूर्ण करने के लिए brk/sbrk और हीप सेगमेंट के उपयोग की आवश्यकता नहीं है calloc/realloc/free; प्रक्रिया 'आभासी ज्ञात स्थान में वर्चुअल मेमोरी के संभावित गैर-सन्निहित क्षेत्रों को आरक्षित/अनारक्षित करने के लिए उन्हें mmap/munmap का उपयोग करके भी कार्यान्वित किया जा सकता है)। हीप सेगमेंट को प्रक्रिया में सभी थ्रेड्स, भागीदारी पुस्तकालय और गतिशील रूप से लोड किए गए मॉड्यूल द्वारा भागीदारी की जाता है।
हीप
स्टैक सेगमेंट में कॉल स्टैक, लिफो संरचना होती है, जो सामान्यतः मेमोरी के उच्च भागों में स्थित होती है। स्टैक पॉइंटर रजिस्टर स्टैक के शीर्ष को ट्रैक करता है; जब कोई मान स्टैक पर समायोजित किया जाता है। फ़ंक्शन कॉल के लिए पुश किए गए मानों के समुच्चय को स्टैक फ़्रेम कहा जाता है। स्टैक फ्रेम में कम से कम रिटर्न एड्रेस होता है। स्टैक पर स्वचालित वेरिएबल्स भी आवंटित किए जाते हैं।
हीप सेगमेंट पारंपरिक रूप से हीप सेगमेंट से जुड़ा हुआ है और वे दूसरे की ओर बढ़ते हैं; जब स्टैक पॉइंटर हीप पॉइंटर से मिलता है, तो फ्री मेमोरी समाप्त हो जाती है। बड़े एड्रेस स्पेस और वर्चुअल मेमोरी तकनीकों के साथ वे अधिक स्वतंत्र रूप से रखे जाते हैं, किन्तु वे अभी भी सामान्यतः अभिसरण दिशा में बढ़ते हैं। मानक पीसी x86 वास्तुकला पर स्टैक ज्ञात शून्य की ओर बढ़ता है, जिसका अर्थ है कि अधिक समय के आइटम, कॉल श्रृंखला में गहरे, संख्यात्मक रूप से कम ज्ञात पर और हीप के निकट हैं। कुछ अन्य वास्तुकला पर यह विपरीत दिशा में बढ़ता है।
इंटरप्रेटेड लैंग्वेजेज
कुछ इंटरप्रेटेड लैंग्वेजेज डेटा सेगमेंट के लिए समान सुविधा प्रदान करती हैं, जिसमें विशेष रूप से पर्ल[1] और रूबी (प्रोग्रामिंग भाषा) सम्मिलित हैं।[2] इन लैंग्वेजेज में, लाइन __DATA__
(पर्ल) या __END__
(रूबी, ओल्ड पर्ल) सहित कोड सेगमेंट के एन्ड और डेटा सेगमेंट के स्टार्ट को चिह्नित करता है। केवल इस लाइन से पूर्व के कंटेंट को एक्सीक्यूट किया जाता है, और इस लाइन के पश्चात सोर्स फ़ाइल के कंटेंट फ़ाइल ऑब्जेक्ट के रूप में उपलब्ध होते है: PACKAGE::DATA
पर्ल में (उदा., main::DATA
) और DATA
रूबी में इसे हेयर डॉक्यूमेंट (फ़ाइल लिट्रल) का रूप माना जा सकता है।
यह भी देखें
- सेगमेंटेशन (मेमोरी)
- सेगमेंटेशन फाल्ट
- लिंकर (कंप्यूटिंग)
- कोड सेगमेंट
- बीएसएस
- अनइनिशियलाइज़्ड वेरिएबल्स
- स्टैक (एब्स्ट्रैक्ट डेटा टाइप)
- प्रोसेस कण्ट्रोल ब्लॉक
संदर्भ
- ↑ perldata: Special Literals
- ↑ Ruby: Object: __END__
बाहरी संबंध
- "C startup". bravegnu.org.
- "mem_sequence.c - sequentially lists memory regions in a process". Archived from the original on 2009-02-02.
- van der Linden, Peter (1997). Expert C Programming: Deep C Secrets (PDF). Prentice Hall. pp. 119ff.