स्थैतिक चर (स्टैटिक वेरिएबल): Difference between revisions

From Vigyanwiki
No edit summary
Line 1: Line 1:
{{short description|Programming variable that persists for the lifetime of the program}}
{{short description|Programming variable that persists for the lifetime of the program}}
{{see also|Static (keyword)}}
{{see also|स्थिर (कीवर्ड)}}
[[कंप्यूटर प्रोग्रामिंग]] में, एक स्थिर चर एक [[चर (प्रोग्रामिंग)]] है जो [[स्मृति आवंटन]] स्थिर रूप से किया गया है, जिसका अर्थ है कि इसका चर जीवनकाल (या सीमा) कार्यक्रम का संपूर्ण भाग है। यह अल्पकालिक [[स्वचालित चर]] के विपरीत है, जिसका भंडारण स्टैक आवंटन है और [[कॉल स्टैक]] पर हटा दिया गया है; और [[ वस्तु (कंप्यूटर विज्ञान) ]] के विपरीत, जिसका भंडारण डायनेमिक मेमोरी आवंटन है और ढेर मेमोरी में हटा दिया गया है।
[[कंप्यूटर प्रोग्रामिंग]] में, स्थिर [[चर (प्रोग्रामिंग)]] है जो [[स्मृति आवंटन]] स्थिर रूप से किया गया है, जिसका अर्थ है कि इसका चर जीवनकाल (या सीमा) कार्यक्रम का संपूर्ण भाग है। यह अल्पकालिक [[स्वचालित चर]] के विपरीत है, जिसका भंडारण स्टैक आवंटन है एवं [[कॉल स्टैक]] पर विस्थापित किया गया है, एवं [[ वस्तु (कंप्यूटर विज्ञान) |वस्तु (कंप्यूटर विज्ञान)]] के विपरीत, जिसका भंडारण डायनेमिक मेमोरी आवंटन है एवं समूह मेमोरी में विस्थापित किया गया है।


चर जीवनकाल स्कोप (कंप्यूटर विज्ञान) (जहां एक चर का उपयोग किया जा सकता है) के विपरीत है: वैश्विक और स्थानीय दायरे का संदर्भ देते हैं, जीवनकाल नहीं, लेकिन गुंजाइश अक्सर जीवनकाल का अर्थ है। कई भाषाओं में, [[वैश्विक चर]] हमेशा स्थिर होते हैं, लेकिन कुछ भाषाओं में वे गतिशील होते हैं, जबकि [[स्थानीय चर]] आमतौर पर स्वचालित होते हैं, लेकिन स्थिर हो सकते हैं।
चर जीवनकाल स्कोप (कंप्यूटर विज्ञान) (जहां चर का उपयोग किया जा सकता है) के विपरीत है: वैश्विक एवं स्थानीय परिधि का संदर्भ देते हैं, जीवनकाल नहीं, किन्तु स्थान प्रायः जीवनकाल का अर्थ है। कई भाषाओं में, [[वैश्विक चर]] सदैव स्थिर होते हैं, किन्तु कुछ भाषाओं में वे गतिशील होते हैं, जबकि [[स्थानीय चर]] सामान्यतः स्वचालित होते हैं, किन्तु स्थिर हो सकते हैं।


सामान्य रूप में,{{visible anchor|static memory allocation}} [[संकलन समय]] पर मेमोरी का आवंटन है, संबंधित प्रोग्राम के निष्पादित होने से पहले, डायनेमिक मेमोरी आवंटन या [[स्वचालित मेमोरी आवंटन]] के विपरीत जहां मेमोरी को रन टाइम (प्रोग्राम जीवनचक्र चरण) में आवश्यकतानुसार आवंटित किया जाता है।<ref>{{cite web
सामान्य रूप में,{{visible anchor|static memory allocation}} [[संकलन समय]] पर मेमोरी का आवंटन है, संबंधित प्रोग्राम के निष्पादित होने से पहले, डायनेमिक मेमोरी आवंटन या [[स्वचालित मेमोरी आवंटन]] के विपरीत जहां मेमोरी को रन टाइम (प्रोग्राम जीवनचक्र चरण) में आवश्यकतानुसार आवंटित किया जाता है।<ref>{{cite web
Line 19: Line 19:
|A declaration may be marked with the additional declarator '''own.''' This has the following effect: upon a re-entry into the block, the values of '''own''' quantities will be unchanged from their values at the last exit, while the values of declared variables that are not marked with '''own''' is undefined.
|A declaration may be marked with the additional declarator '''own.''' This has the following effect: upon a re-entry into the block, the values of '''own''' quantities will be unchanged from their values at the last exit, while the values of declared variables that are not marked with '''own''' is undefined.
|Revised report on ALGOL 60, section "5. Declarations", p. 14}}
|Revised report on ALGOL 60, section "5. Declarations", p. 14}}
यह परिभाषा एक स्थिर चर से काफी अलग है: यह केवल व्यवहार को निर्दिष्ट करती है, और इसलिए आजीवन, भंडारण नहीं: एक स्वयं के चर को तब आवंटित किया जा सकता है जब किसी फ़ंक्शन को पहली बार कॉल किया जाता है, उदाहरण के लिए, प्रोग्राम लोड समय के बजाय।
यह परिभाषा एक स्थिर चर से काफी अलग है: यह केवल व्यवहार को निर्दिष्ट करती है, एवं इसलिए आजीवन, भंडारण नहीं: एक स्वयं के चर को तब आवंटित किया जा सकता है जब किसी फ़ंक्शन को पहली बार कॉल किया जाता है, उदाहरण के लिए, प्रोग्राम लोड समय के बजाय।


इन चरों को संदर्भित करने के लिए स्थिर शब्द का उपयोग कम से कम [[बीसीपीएल]] (1966) तक होता है, और [[सी प्रोग्रामिंग भाषा]] द्वारा लोकप्रिय किया गया है, जो बीसीपीएल से काफी प्रभावित था। बीसीपीएल परिभाषा पढ़ती है:
इन चरों को संदर्भित करने के लिए स्थिर शब्द का उपयोग कम से कम [[बीसीपीएल]] (1966) तक होता है, एवं [[सी प्रोग्रामिंग भाषा]] द्वारा लोकप्रिय किया गया है, जो बीसीपीएल से काफी प्रभावित था। बीसीपीएल परिभाषा पढ़ती है:
{{quote
{{quote
|(1) Static data items:<br>Those data items whose extents lasts as long as the program execution time; such data items have manifest constant Lvalues. Every static data item must have been declared either in a function or routine definition, in a global declaration or as a label set by colon.
|(1) Static data items:<br>Those data items whose extents lasts as long as the program execution time; such data items have manifest constant Lvalues. Every static data item must have been declared either in a function or routine definition, in a global declaration or as a label set by colon.
Line 27: Line 27:
ध्यान दें कि बीसीपीएल ने एक गतिशील डेटा आइटम को परिभाषित किया है जिसे अब एक स्वचालित चर (स्थानीय, स्टैक-आवंटित) कहा जाता है, ढेर-आवंटित वस्तुओं के लिए नहीं, जो कि गतिशील आवंटन शब्द का वर्तमान उपयोग है।
ध्यान दें कि बीसीपीएल ने एक गतिशील डेटा आइटम को परिभाषित किया है जिसे अब एक स्वचालित चर (स्थानीय, स्टैक-आवंटित) कहा जाता है, ढेर-आवंटित वस्तुओं के लिए नहीं, जो कि गतिशील आवंटन शब्द का वर्तमान उपयोग है।


द स्टेटिक (कीवर्ड) |<code>static</code> C और संबंधित भाषाओं में स्थिर चर और अन्य अवधारणाओं दोनों के लिए कीवर्ड का उपयोग किया जाता है।
द स्टेटिक (कीवर्ड) |<code>static</code> C एवं संबंधित भाषाओं में स्थिर चर एवं अन्य अवधारणाओं दोनों के लिए कीवर्ड का उपयोग किया जाता है।


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


== स्कोप ==
== स्कोप ==
{{see also|Variable (computer science)#Scope and extent}}
{{see also|Variable (computer science)#Scope and extent}}


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


=== उदाहरण ===
=== उदाहरण ===
Line 64: Line 64:


== वस्तु-उन्मुख प्रोग्रामिंग ==
== वस्तु-उन्मुख प्रोग्रामिंग ==
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग ]] में, एक [[स्थिर [[सदस्य चर]]]] की अवधारणा भी होती है, जो कि स्थिर रूप से परिभाषित वर्ग का एक [[वर्ग चर]] होता है, यानी, किसी दिए गए वर्ग का एक सदस्य चर जो सभी [[वर्ग उदाहरण]]ों (ऑब्जेक्ट्स) में साझा किया जाता है, और है इन वस्तुओं के सदस्य चर के रूप में पहुँचा जा सकता है। एक गतिशील रूप से परिभाषित वर्ग का एक वर्ग चर, उन भाषाओं में जहाँ कक्षाओं को रन टाइम पर परिभाषित किया जा सकता है, तब आवंटित किया जाता है जब वर्ग परिभाषित होता है और स्थिर नहीं होता है।
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग ]] में, एक [[स्थिर [[सदस्य चर]]]] की अवधारणा भी होती है, जो कि स्थिर रूप से परिभाषित वर्ग का एक [[वर्ग चर]] होता है, यानी, किसी दिए गए वर्ग का एक सदस्य चर जो सभी [[वर्ग उदाहरण]]ों (ऑब्जेक्ट्स) में साझा किया जाता है, एवं है इन वस्तुओं के सदस्य चर के रूप में पहुँचा जा सकता है। एक गतिशील रूप से परिभाषित वर्ग का एक वर्ग चर, उन भाषाओं में जहाँ कक्षाओं को रन टाइम पर परिभाषित किया जा सकता है, तब आवंटित किया जाता है जब वर्ग परिभाषित होता है एवं स्थिर नहीं होता है।


संकलन-समय पर ज्ञात वस्तु स्थिरांक, जैसे कि स्ट्रिंग शाब्दिक, आमतौर पर स्थिर रूप से आवंटित किए जाते हैं। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, क्लासेस के [[ आभासी विधि तालिका ]] आमतौर पर स्टैटिकली आवंटित किए जाते हैं। एक स्थाई रूप से परिभाषित मूल्य वैश्विक चर भी हो सकता है, यह सुनिश्चित करने के लिए एक ही [[अपरिवर्तनीय वस्तु]] मूल्य का उपयोग स्थिरता के लिए किया जाता है।
संकलन-समय पर ज्ञात वस्तु स्थिरांक, जैसे कि स्ट्रिंग शाब्दिक, सामान्यतः स्थिर रूप से आवंटित किए जाते हैं। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, क्लासेस के [[ आभासी विधि तालिका ]] सामान्यतः स्टैटिकली आवंटित किए जाते हैं। एक स्थाई रूप से परिभाषित मूल्य वैश्विक चर भी हो सकता है, यह सुनिश्चित करने के लिए एक ही [[अपरिवर्तनीय वस्तु]] मूल्य का उपयोग स्थिरता के लिए किया जाता है।


== यह भी देखें ==
== यह भी देखें ==

Revision as of 16:04, 20 May 2023

कंप्यूटर प्रोग्रामिंग में, स्थिर चर (प्रोग्रामिंग) है जो स्मृति आवंटन स्थिर रूप से किया गया है, जिसका अर्थ है कि इसका चर जीवनकाल (या सीमा) कार्यक्रम का संपूर्ण भाग है। यह अल्पकालिक स्वचालित चर के विपरीत है, जिसका भंडारण स्टैक आवंटन है एवं कॉल स्टैक पर विस्थापित किया गया है, एवं वस्तु (कंप्यूटर विज्ञान) के विपरीत, जिसका भंडारण डायनेमिक मेमोरी आवंटन है एवं समूह मेमोरी में विस्थापित किया गया है।

चर जीवनकाल स्कोप (कंप्यूटर विज्ञान) (जहां चर का उपयोग किया जा सकता है) के विपरीत है: वैश्विक एवं स्थानीय परिधि का संदर्भ देते हैं, जीवनकाल नहीं, किन्तु स्थान प्रायः जीवनकाल का अर्थ है। कई भाषाओं में, वैश्विक चर सदैव स्थिर होते हैं, किन्तु कुछ भाषाओं में वे गतिशील होते हैं, जबकि स्थानीय चर सामान्यतः स्वचालित होते हैं, किन्तु स्थिर हो सकते हैं।

सामान्य रूप में,static memory allocation संकलन समय पर मेमोरी का आवंटन है, संबंधित प्रोग्राम के निष्पादित होने से पहले, डायनेमिक मेमोरी आवंटन या स्वचालित मेमोरी आवंटन के विपरीत जहां मेमोरी को रन टाइम (प्रोग्राम जीवनचक्र चरण) में आवश्यकतानुसार आवंटित किया जाता है।[1]


इतिहास

स्थैतिक चर कम से कम ALGOL 60 (1960) तक दिनांकित होते हैं, जहाँ उन्हें स्वयं के चर के रूप में जाना जाता है:

A declaration may be marked with the additional declarator own. This has the following effect: upon a re-entry into the block, the values of own quantities will be unchanged from their values at the last exit, while the values of declared variables that are not marked with own is undefined.

— Revised report on ALGOL 60, section "5. Declarations", p. 14

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

इन चरों को संदर्भित करने के लिए स्थिर शब्द का उपयोग कम से कम बीसीपीएल (1966) तक होता है, एवं सी प्रोग्रामिंग भाषा द्वारा लोकप्रिय किया गया है, जो बीसीपीएल से काफी प्रभावित था। बीसीपीएल परिभाषा पढ़ती है:

(1) Static data items:
Those data items whose extents lasts as long as the program execution time; such data items have manifest constant Lvalues. Every static data item must have been declared either in a function or routine definition, in a global declaration or as a label set by colon.

— The BCPL Reference Manual, 7.2 Space Allocation and Extent of Data Items

ध्यान दें कि बीसीपीएल ने एक गतिशील डेटा आइटम को परिभाषित किया है जिसे अब एक स्वचालित चर (स्थानीय, स्टैक-आवंटित) कहा जाता है, ढेर-आवंटित वस्तुओं के लिए नहीं, जो कि गतिशील आवंटन शब्द का वर्तमान उपयोग है।

द स्टेटिक (कीवर्ड) |static C एवं संबंधित भाषाओं में स्थिर चर एवं अन्य अवधारणाओं दोनों के लिए कीवर्ड का उपयोग किया जाता है।

संबोधित करना

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

स्कोप

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

उदाहरण

सी में स्थिर स्थानीय चर का एक उदाहरण:

#include <stdio.h>

void Func() {
  static int x = 0;
  // |x| is initialized only once across five calls of |Func| and the variable
  // will get incremented five times after these calls. The final value of |x|
  // will be 5.
  x++;
  printf("%d\n", x);  // outputs the value of |x|
}

int main() {
  Func();  // prints 1
  Func();  // prints 2
  Func();  // prints 3
  Func();  // prints 4
  Func();  // prints 5

  return 0;
}


वस्तु-उन्मुख प्रोग्रामिंग

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में, एक [[स्थिर सदस्य चर]] की अवधारणा भी होती है, जो कि स्थिर रूप से परिभाषित वर्ग का एक वर्ग चर होता है, यानी, किसी दिए गए वर्ग का एक सदस्य चर जो सभी वर्ग उदाहरणों (ऑब्जेक्ट्स) में साझा किया जाता है, एवं है इन वस्तुओं के सदस्य चर के रूप में पहुँचा जा सकता है। एक गतिशील रूप से परिभाषित वर्ग का एक वर्ग चर, उन भाषाओं में जहाँ कक्षाओं को रन टाइम पर परिभाषित किया जा सकता है, तब आवंटित किया जाता है जब वर्ग परिभाषित होता है एवं स्थिर नहीं होता है।

संकलन-समय पर ज्ञात वस्तु स्थिरांक, जैसे कि स्ट्रिंग शाब्दिक, सामान्यतः स्थिर रूप से आवंटित किए जाते हैं। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, क्लासेस के आभासी विधि तालिका सामान्यतः स्टैटिकली आवंटित किए जाते हैं। एक स्थाई रूप से परिभाषित मूल्य वैश्विक चर भी हो सकता है, यह सुनिश्चित करने के लिए एक ही अपरिवर्तनीय वस्तु मूल्य का उपयोग स्थिरता के लिए किया जाता है।

यह भी देखें

टिप्पणियाँ

  1. Jack Rons. "What is static memory allocation and dynamic memory allocation?". MeritHub [An Institute of Career Development]. Retrieved 2011-06-16. The compiler allocates required memory space for a declared variable. By using the addressof operator, the reserved address is obtained and this address may be assigned to a pointer variable. Since most of the declared variables have static memory, this way of assigning pointer value to a pointer variable is known as static memory allocation. Memory is assigned during compilation time.


संदर्भ