डेटा सेगमेंट

कम्प्यूटिंग में, डेटा सेगमेंट (प्रायः डेटा) वस्तु फ़ाइल का भाग होता है या प्रोग्राम का संबंधित ज्ञात स्थान होता है जिसमें इनिशियलाइज़्ड स्थैतिक चर होते हैं, जैसे वैश्विक चर और स्थिर स्थानीय चर इस खंड का आकार कार्यक्रम के स्रोत कोड में मूल्यों के आकार से निर्धारित होता है, और रन टाइम (कार्यक्रम जीवनचक्र चरण) में नहीं परवर्तित होता है ।

डेटा खंड पढ़ा / लिखा जाता है, क्योंकि चर के मूल्यों को रन टाइम पर परवर्तित किया जा सकता है। यह रीड-ओनली डेटा सेगमेंट (rodata segment or .rodata), जिसमें चर के अतिरिक्त स्थिर स्थिरांक होते हैं; यह कोड सेगमेंट के विपरीत भी है, जिसे टेक्स्ट सेगमेंट के रूप में भी जाना जाता है, जो कई वास्तुकला पर केवल पढ़ने के लिए होता है। गैर-प्रारंभिक डेटा, दोनों चर और स्थिरांक, इसके अतिरिक्त बीएसएस (BSS) खंड में हैं।

ऐतिहासिक रूप से, आंतरिक ज्ञात रजिस्टर के मूल आकार से बड़े मेमोरी एड्रेस स्पेस का समर्थन करने में सक्षम होने के लिए, शुरुआती सीपीयू ने विभाजन की प्रणाली प्रारंभ की जिससे वे कुछ क्षेत्रों में ऑफ़सेट के रूप में उपयोग करने के लिए इंडेक्स के  छोटे सेट को स्टोर करेंगे। सीपीयू के इंटेल 8086 परिवार ने चार खंड प्रदान किए: कोड खंड, डेटा खंड, स्टैक खंड और अतिरिक्त खंड। प्रत्येक खंड को स्मृति में  विशिष्ट स्थान पर सॉफ्टवेयर द्वारा निष्पादित किया गया था उन खंडों के भीतर डेटा पर संचालित सभी निर्देशों को उस खंड की शुरुआत के सापेक्ष निष्पादित किया गया था। इसने 16-बिट एड्रेस रजिस्टर की अनुमति दी, जो सामान्य रूप से 1 एमबी मेमोरी स्पेस तक पहुंचने के लिए 64 केबी मेमोरी स्पेस तक पहुंचने में सक्षम होगा।

विशिष्ट कार्यों के साथ मेमोरी स्पेस को असतत ब्लॉकों में खंडित करना दिन की प्रोग्रामिंग भाषाओं में किया जाता है और अवधारणा अभी भी आधुनिक प्रोग्रामिंग भाषाओं में व्यापक रूप से उपयोग में है।

प्रोग्राम मेमोरी
कंप्यूटर प्रोग्राम मेमोरी को दो वर्गों में वर्गीकृत किया जा सकता है: रीड-ओनली मेमोरी और रीड/राइट मेमोरी। यह भेद प्रारंभिक प्रणालियों से विस्तारित है, जो केवल-पढ़ने के लिए मेमोरी जैसे मास्क रोम, ईपीरोम, प्रोग्राम करने योग्य [[केवल पढ़ने के लिये मेमोरी]] या ईईपीरोम में अपना मुख्य कार्यक्रम रखते हैं। जैसे-जैसे प्रणाली और अधिक जटिल होते गए और रोम (ROM) से क्रियान्वित करने के अतिरिक्त अन्य मीडिया से रैम (RAM) में प्रोग्राम लोड किए गए, यह विचार कि प्रोग्राम की मेमोरी के कुछ भाग को संशोधित नहीं किया जाना चाहिए, निरंतर रखा गया था। ये कार्यक्रम के .text और .rodata खंड बन गए, और शेष जिन्हें विशिष्ट कार्यों के लिए कई अन्य खंडों में विभाजित करने के लिए लिखा जा सकता था।

कोड
कोड खंड, जिसे पाठ खंड के रूप में भी जाना जाता है, में निष्पादन योग्य कोड होता है और यह सामान्यतः केवल पढ़ने के लिए और निश्चित आकार का होता है।

डेटा
फाइल:प्रोग्राम मेमोरी लेआउट.पीडीएफ|थंब|383x383पी्स|यह टेक्स्ट, विभिन्न डेटा और स्टैक और हीप सेक्शन के साथ साधारण कंप्यूटर की प्रोग्राम मेमोरी के विशिष्ट लेआउट को दिखाता है। डेटा खंड में आरंभिक स्थैतिक चर होते हैं, जैसेवैश्विक चर और स्थानीय स्थैतिक चर जिनका परिभाषित मूल्य होता है और जिन्हें संशोधित किया जा सकता है। सी में उदाहरणों में सम्मलित हैं:

इंट मैं = 3; चार ए [] = हैलो वर्ल्ड;

इन चरों के मान प्रारंभ में रीड-ओनली मेमोरी (सामान्यतःपर कोड सेगमेंट के भीतर) में संग्रहीत किए जाते हैं और प्रोग्राम के स्टार्ट-अप रूटीन के दौरान डेटा सेगमेंट में कॉपी किए जाते हैं।

बीएसएस
बीएसएस सेगमेंट में गैर-प्रारंभिक स्थिर डेटा, चर और स्थिरांक दोनों सम्मलित हैं, जैसेवैश्विक चर और स्थानीय स्थैतिक चर जो शून्य से आरंभीकृत हैं या स्रोत कोड में स्पष्ट आरंभीकरण नहीं है। सी में उदाहरणों में सम्मलित हैं:

स्थिर int मैं; स्टेटिक चार ए [12];

ढेर
हीप सेगमेंट में गतिशील रूप से आवंटित मेमोरी होती है, सामान्यतः पर बीएसएस सेगमेंट के अंत में शुरू होती है और वहां से बड़े पतों तक बढ़ती है। यह malloc, calloc, realloc, और free द्वारा प्रबंधित किया जाता है, जो इसके आकार को समायोजित करने के लिए Sbrk और sbrk प्रणालीकॉल का उपयोग कर सकता है (ध्यान दें कि malloc/ के अनुबंध को पूरा करने के लिए brk/sbrk और ल हीप सेगमेंट के उपयोग की आवश्यकता नहीं है calloc/realloc/free; प्रक्रिया 'आभासी ज्ञात स्थान में वर्चुअल मेमोरी के संभावित गैर-सन्निहित क्षेत्रों को आरक्षित/अनारक्षित करने के लिए उन्हें mmap/munmap का उपयोग करके भी कार्यान्वित किया जा सकता है)। हीप सेगमेंट को प्रक्रिया में सभी थ्रेड्स, साझा लाइब्रेरी और गतिशील रूप से लोड किए गए मॉड्यूल द्वारा साझा किया जाता है।

ढेर
स्टैक सेगमेंट में कॉल स्टैक, LIFO (कंप्यूटिंग) संरचना होती है, जो सामान्यतःपर मेमोरी के उच्च भागों में स्थित होती है। स्टैक पॉइंटर रजिस्टर स्टैक के शीर्ष को ट्रैक करता है; हर बार जब कोई मान स्टैक पर धकेला जाता है तो इसे समायोजित किया जाता है।  फ़ंक्शन कॉल के लिए पुश किए गए मानों के सेट को स्टैक फ़्रेम कहा जाता है।  स्टैक फ्रेम में कम से कम रिटर्न एड्रेस होता है। स्टैक पर स्वचालित चर भी आवंटित किए जाते हैं।

ढेर खंड पारंपरिक रूप से हीप खंड से जुड़ा हुआ है और वे दूसरे की ओर बढ़ते हैं; जब स्टैक पॉइंटर हीप पॉइंटर से मिलता है, तो फ्री मेमोरी समाप्त हो जाती है। बड़े एड्रेस स्पेस और वर्चुअल मेमोरी तकनीकों के साथ वे अधिक स्वतंत्र रूप से रखे जाते हैं, लेकिन वे अभी भी सामान्यतः  अभिसरण दिशा में बढ़ते हैं। मानक पीसी x86 आर्किटेक्चर पर स्टैक ज्ञात शून्य की ओर बढ़ता है, जिसका अर्थ है कि अधिक हाल के आइटम, कॉल श्रृंखला में गहरे, संख्यात्मक रूप से कम पते पर और हीप के करीब हैं। कुछ अन्य आर्किटेक्चर पर यह विपरीत दिशा में बढ़ता है।

व्याख्या की गई भाषाएँ
व्याख्या की गई कुछ भाषाएँ डेटा खंड के लिए समान सुविधा प्रदान करती हैं, विशेष रूप से पर्ल और रूबी (प्रोग्रामिंग भाषा)। इन भाषाओं में, रेखा सहित  (पर्ल) या   (रूबी, पुराना पर्ल) कोड सेगमेंट के अंत और डेटा सेगमेंट की शुरुआत को चिह्नित करता है। केवल इस लाइन से पहले की सामग्री को निष्पादित किया जाता है, और इस लाइन के बाद स्रोत फ़ाइल की सामग्री फ़ाइल ऑब्जेक्ट के रूप में उपलब्ध होती है:   पर्ल में (उदा.,  ) और   रूबी में। इसे यहाँ दस्तावेज़ ( फ़ाइल शाब्दिक) का  रूप माना जा सकता है।

यह भी देखें

 * विभाजन (मेमोरी)
 * विखंडन दोष
 * लिंकर (कंप्यूटिंग)
 * कोड खंड
 * .बीएसएस
 * गैर-प्रारंभिक चर
 * ढेर (सार डेटा प्रकार)
 * प्रक्रिया नियंत्रण ब्लॉक