डेटा सेगमेंट: Difference between revisions

From Vigyanwiki
No edit summary
m (Abhishekkshukla moved page डेटा खंड to डेटा सेगमेंट without leaving a redirect)
 
(10 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Short description|Storage segment}}
{{Short description|Storage segment}}
[[कम्प्यूटिंग]] में, डेटा सेगमेंट (प्रायः डेटा) [[वस्तु फ़ाइल]] का भाग होता है या प्रोग्राम का संबंधित [[पता स्थान|ज्ञात स्थान]] होता है जिसमें इनिशियलाइज़्ड [[स्थैतिक चर]] होते हैं, जैसे [[वैश्विक चर]] और [[स्थिर स्थानीय चर]] इस खंड का आकार कार्यक्रम के स्रोत कोड में मूल्यों के आकार से निर्धारित होता है, और [[रन टाइम (कार्यक्रम जीवनचक्र चरण)]] में नहीं परवर्तित होता है ।
कम्प्यूटिंग में, '''डेटा सेगमेंट''' [[वस्तु फ़ाइल]] का भाग होता है या प्रोग्राम का संबंधित [[पता स्थान|ज्ञात स्थान]] होता है जिसमें इनिशियलाइज़्ड [[स्थैतिक चर]] होते हैं, जैसे [[वैश्विक चर]] और [[स्थिर स्थानीय चर]] इस खंड का आकार कार्यक्रम के स्रोत कोड में मूल्यों के आकार से निर्धारित होता है, और [[रन टाइम (कार्यक्रम जीवनचक्र चरण)|रन टाइम]] में नहीं परवर्तित होता है ।


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


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


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


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


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


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


इंट मैं = 3;
डेटा खंड में आरंभिक स्थैतिक चर होते हैं, जैसे वैश्विक चर और स्थानीय स्थैतिक चर जिनका परिभाषित मूल्य होता है और जिन्हें संशोधित किया जा सकता है। सी में उदाहरणों में सम्मलित हैं:
चार ए [] = हैलो वर्ल्ड;


इन चरों के मान प्रारंभ में रीड-ओनली मेमोरी (सामान्यतःपर कोड सेगमेंट के भीतर) में संग्रहीत किए जाते हैं और प्रोग्राम के स्टार्ट-अप रूटीन के दौरान डेटा सेगमेंट में कॉपी किए जाते हैं।
int i = 3;
char a[] = "Hello World";
 
इन चरों के मान प्रारंभ में रीड-ओनली मेमोरी (सामान्यतः पर कोड सेगमेंट के भीतर) में संग्रहीत किए जाते हैं और प्रोग्राम को सुचारु रूप से डेटा सेगमेंट में कॉपी किया जाता है।


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


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


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


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


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


== व्याख्या की गई भाषाएँ ==
== व्याख्या की गई भाषाएँ ==
व्याख्या की गई कुछ भाषाएँ डेटा खंड के लिए समान सुविधा प्रदान करती हैं, विशेष रूप से [[पर्ल]]<ref>[http://perldoc.perl.org/perldata.html#Special-Literals perldata: Special Literals]</ref> और [[रूबी (प्रोग्रामिंग भाषा)]]।<ref>Ruby: Object: [http://ruby-doc.org/docs/keywords/1.9/Object.html#method-i-__END__ __END__]</ref> इन भाषाओं में, रेखा सहित <code>__DATA__</code> (पर्ल) या <code>__END__</code> (रूबी, पुराना पर्ल) कोड सेगमेंट के अंत और डेटा सेगमेंट की शुरुआत को चिह्नित करता है। केवल इस लाइन से पहले की सामग्री को निष्पादित किया जाता है, और इस लाइन के बाद स्रोत फ़ाइल की सामग्री फ़ाइल ऑब्जेक्ट के रूप में उपलब्ध होती है: <code>PACKAGE::DATA</code> पर्ल में (उदा., <code>main::DATA</code>) और <code>DATA</code> रूबी में। इसे [[यहाँ दस्तावेज़]] ( फ़ाइल शाब्दिक) का रूप माना जा सकता है।
व्याख्या की गई कुछ भाषाएँ डेटा खंड के लिए समान सुविधा प्रदान करती हैं, विशेष रूप से [[पर्ल]]<ref>[http://perldoc.perl.org/perldata.html#Special-Literals perldata: Special Literals]</ref> और [[रूबी (प्रोग्रामिंग भाषा)]]।<ref>Ruby: Object: [http://ruby-doc.org/docs/keywords/1.9/Object.html#method-i-__END__ __END__]</ref> इन भाषाओं में, रेखा सहित <code>__DATA__</code> (पर्ल) या <code>__END__</code> (रूबी, प्राचीन पर्ल) कोड सेगमेंट के अंत और डेटा सेगमेंट की प्रारंभिक को चिह्नित करता है। केवल इस लाइन से पहले की सामग्री को निष्पादित किया जाता है, और इस लाइन के पश्चात स्रोत फ़ाइल की सामग्री फ़ाइल ऑब्जेक्ट के रूप में उपलब्ध होती है: <code>PACKAGE::DATA</code> पर्ल में (उदा., <code>main::DATA</code>) और <code>DATA</code> रूबी में इसे [[यहाँ दस्तावेज़]] ( फ़ाइल शाब्दिक) का रूप माना जा सकता है।


== यह भी देखें ==
== यह भी देखें ==
Line 77: Line 78:
|pages = 119ff}}
|pages = 119ff}}


{{DEFAULTSORT:Data Segment}}[[Category: निष्पादन योग्य फ़ाइल स्वरूप]] [[Category: स्मृति प्रबंधन]]
{{DEFAULTSORT:Data Segment}}
 
 


[[Category: Machine Translated Page]]
[[Category:Articles with hatnote templates targeting a nonexistent page|Data Segment]]
[[Category:Created On 17/02/2023]]
[[Category:Created On 17/02/2023|Data Segment]]
[[Category:Lua-based templates|Data Segment]]
[[Category:Machine Translated Page|Data Segment]]
[[Category:Pages with script errors|Data Segment]]
[[Category:Short description with empty Wikidata description|Data Segment]]
[[Category:Templates Vigyan Ready|Data Segment]]
[[Category:Templates that add a tracking category|Data Segment]]
[[Category:Templates that generate short descriptions|Data Segment]]
[[Category:Templates using TemplateData|Data Segment]]
[[Category:निष्पादन योग्य फ़ाइल स्वरूप|Data Segment]]
[[Category:स्मृति प्रबंधन|Data Segment]]

Latest revision as of 15:38, 27 October 2023

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

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

ऐतिहासिक रूप से, आंतरिक ज्ञात रजिस्टर के मूल आकार से बड़े मेमोरी एड्रेस स्पेस का समर्थन करने में सक्षम होने के लिए, प्रारंभिक सीपीयू ने विभाजन की प्रणाली प्रारंभ की। जिससे वे कुछ क्षेत्रों में ऑफ़समुच्चय के रूप में उपयोग करने के लिए इंडेक्स के छोटे समुच्चय को स्टोर करेंगे। सीपीयू के इंटेल 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 रूबी में इसे यहाँ दस्तावेज़ ( फ़ाइल शाब्दिक) का रूप माना जा सकता है।

यह भी देखें

संदर्भ


बाहरी संबंध

  • "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.