डेटा सेगमेंट

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

डेटा खंड पढ़ा / लिखा जाता है, क्योंकि चर के मूल्यों को रन टाइम पर बदला जा सकता है। यह रीड-ओनली डेटा सेगमेंट ('' के विपरीत है खंड या .रोडाटा), जिसमें चर के बजाय स्थिर स्थिरांक होते हैं; यह कोड सेगमेंट के विपरीत भी है, जिसे टेक्स्ट सेगमेंट के रूप में भी जाना जाता है, जो कई आर्किटेक्चर पर केवल पढ़ने के लिए होता है। गैर-प्रारंभिक डेटा, दोनों चर और स्थिरांक, इसके बजाय 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 आर्किटेक्चर पर स्टैक पता शून्य की ओर बढ़ता है, जिसका अर्थ है कि अधिक हाल के आइटम, कॉल श्रृंखला में गहरे, संख्यात्मक रूप से कम पते पर और हीप के करीब हैं। कुछ अन्य आर्किटेक्चर पर यह विपरीत दिशा में बढ़ता है।

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

यह भी देखें

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