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

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

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

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

इतिहास
स्थैतिक चर कम से कम 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

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

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

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

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

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

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

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

यह भी देखें

 * लगातार (कंप्यूटर प्रोग्रामिंग)
 * वैश्विक चर
 * स्थैतिक विधि
 * थ्रेड-लोकल स्टोरेज

संदर्भ

 * The C++ Programming Language (special edition) by Bjarne Stroustrup (Addison Wesley, 2000; ISBN 0-201-70073-5)
 * The C++ Programming Language (special edition) by Bjarne Stroustrup (Addison Wesley, 2000; ISBN 0-201-70073-5)