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

From Vigyanwiki
Revision as of 16:08, 20 May 2023 by alpha>Artiverma

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

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

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


इतिहास

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

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

— ऐल्गॉल 60 पर संशोधित रिपोर्ट, खंड "5 में घोषणाएं", पी-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.


संदर्भ