सी प्रोग्राम के लिए मेमोरी लेआउट नीचे जैसा है। कुछ स्तर हैं। ये हैं -
- स्टैक सेगमेंट
- हीप खंड
- पाठ खंड
- डेटा खंड
अब देखते हैं कि इन अनुभागों के कार्य क्या हैं।
<टेबल> <थेड>प्रक्रिया स्टैक में अस्थायी डेटा जैसे विधि/फ़ंक्शन पैरामीटर, वापसी पता और स्थानीय चर शामिल हैं। यह स्वचालित चर और फ़ंक्शन पैरामीटर के लिए आवंटित स्मृति का एक क्षेत्र है। यह फ़ंक्शन कॉल निष्पादित करते समय एक वापसी पता भी संग्रहीत करता है। स्टैक स्थानीय या स्वचालित चर, फ़ंक्शन मापदंडों को संग्रहीत करने और अगले पते या वापसी पते को संग्रहीत करने के लिए LIFO (लास्ट-इन-फर्स्ट-आउट) तंत्र का उपयोग करता है। रिटर्न एड्रेस फ़ंक्शन निष्पादन के पूरा होने के बाद वापस आने वाले पते को संदर्भित करता है। यह खंड आकार स्थानीय चर, फ़ंक्शन पैरामीटर और फ़ंक्शन कॉल के अनुसार परिवर्तनशील है। यह खंड उच्च पते से निम्न पते की ओर बढ़ता है।
यह गतिशील रूप से मेमोरी को उसके रन टाइम के दौरान एक प्रक्रिया के लिए आवंटित किया जाता है। यह गतिशील स्मृति भंडारण के लिए आवंटित स्मृति का क्षेत्र है जैसे कि malloc() और calloc() कॉल के लिए। उपयोगकर्ता आवंटन के अनुसार इस खंड का आकार भी परिवर्तनशील है। यह खंड निम्न पते से उच्च पते की ओर बढ़ता है।
आइए अब देखें कि कुछ नमूना कार्यक्रमों के साथ सेगमेंट (डेटा और बीएसएस सेगमेंट) का आकार कैसे बदलता है। खंड का आकार "आकार" कमांड को निष्पादित करके जाना जाता है।
इसमें प्रोग्राम काउंटर के मूल्य और प्रोसेसर के रजिस्टरों की सामग्री द्वारा दर्शाई गई वर्तमान गतिविधि शामिल है। इसे .text अनुभाग द्वारा दर्शाया जाता है। यह स्मृति में एक क्षेत्र को परिभाषित करता है जो निर्देश कोड संग्रहीत करता है। यह भी एक निश्चित क्षेत्र है।
इस खंड में वैश्विक और स्थिर चर शामिल हैं। इसे .data अनुभाग और .bss द्वारा दर्शाया जाता है। .डेटा अनुभाग का उपयोग मेमोरी क्षेत्र को घोषित करने के लिए किया जाता है, जहां प्रोग्राम के लिए डेटा तत्व संग्रहीत किए जाते हैं। डेटा तत्वों की घोषणा के बाद इस खंड का विस्तार नहीं किया जा सकता है, और यह पूरे कार्यक्रम में स्थिर रहता है।
.bss अनुभाग भी एक स्थिर स्मृति अनुभाग है जिसमें प्रोग्राम में बाद में घोषित किए जाने वाले डेटा के लिए बफ़र्स होते हैं। यह बफर मेमोरी जीरो-फिल्ड होती है।
डेटा खंडों को दो और भागों में विभाजित किया जा सकता है।
वरिष्ठ संख्या | अनुभाग और विवरण |
---|---|
1 | आरंभिक डेटा खंड यह ऑब्जेक्ट फ़ाइल या प्रोग्राम के वर्चुअल एड्रेस स्पेस का एक हिस्सा है जिसमें गैर-प्रारंभिक स्थिर और वैश्विक चर होते हैं। अन-इनिशियलाइज़्ड डेटा सेगमेंट को BSS (ब्लॉक स्टार्टेड बाय सिंबल) सेगमेंट भी कहा जाता है। |
2 | अन-इनिशियलाइज़्ड डेटा सेगमेंट यह रीड-राइट है, क्योंकि रन टाइम के दौरान वैरिएबल के मान बदले जा सकते हैं। इस खंड का एक निश्चित आकार भी है। |