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

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

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

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

इतिहास
स्थैतिक चर कम से कम ऐल्गॉल 60 (1960) तक दिनांकित होते हैं, जहाँ उन्हें स्वयं के चर के रूप में जाना जाता है।

"घोषणा को अतिरिक्त घोषणाकर्ता स्वयं के साथ चिह्नित किया जा सकता है। इसका निम्न प्रभाव है, ब्लॉक में प्रवेश करने पर, स्वयं मात्रा के मान उनके मूल्यों से अपरिवर्तित रहेंगे, अंतिम निकास, जबकि घोषित चर के मान जो स्वयं के साथ चिह्नित नहीं हैं, अपरिभाषित हैं।"

- ऐल्गॉल 60 पर संशोधित रिपोर्ट, खंड "5 में घोषणाएं", पी-14 हैं।

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

इन चरों को संदर्भित करने के लिए स्थिर शब्द का उपयोग कम से कम बीसीपीएल (1966) तक होता है, एवं सी प्रोग्रामिंग भाषा द्वारा लोकप्रिय किया गया है, जो बीसीपीएल से अत्यधिक प्रभावित था। बीसीपीएल परिभाषा पढ़ती है: "(1) स्टेटिक डेटा आइटम: वे डेटा आइटम जिनकी सीमा प्रोग्राम के निष्पादन समय तक रहती है; इस प्रकार के डेटा आइटम में निरंतर अंतराल दिखाई देते हैं। वैश्विक घोषणा में या कोलन द्वारा निर्धारित लेबल के रूप में प्रत्येक स्थैतिक डेटा आइटम को या तो फ़ंक्शन या नियमित परिभाषा में घोषित किया जाना चाहिए।"

- बीसीपीएल संदर्भ नियमावली, 7.2 अंतरिक्ष आवंटन और डेटा क्षेत्र की सीमा

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

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)