स्थैतिक चर (स्टैटिक वेरिएबल): Difference between revisions
No edit summary |
No edit summary |
||
(10 intermediate revisions by 4 users not shown) | |||
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}} | ||
[[कंप्यूटर प्रोग्रामिंग]] में, '''स्थैतिक चर''' (प्रोग्रामिंग) है जो [[स्मृति आवंटन|"स्थैतिक रूप "]] से आवंटित किया गया है, जिसका अर्थ है कि इसका जीवनकाल (या सीमा) कार्यक्रम का संपूर्ण भाग है। यह अल्पकालिक [[स्वचालित चर]] के विपरीत है, जिसका भंडारण स्टैक आवंटित एवं [[कॉल स्टैक]] पर विस्थापित किया गया है, एवं [[ वस्तु (कंप्यूटर विज्ञान) |वस्तु (कंप्यूटर विज्ञान)]] के विपरीत, जिसका भंडारण गतिशील रूप से आवंटित किया जाता है एवं हीप मेमोरी में विस्थापित किया जाता है। | |||
[[कंप्यूटर प्रोग्रामिंग]] में, | |||
चर जीवनकाल | चर जीवनकाल क्षेत्र (कंप्यूटर विज्ञान) (जहां चर का उपयोग किया जा सकता है) के विपरीत है: वैश्विक एवं स्थानीय परिधि को संदर्भित करता है, जीवनकाल नहीं, किन्तु स्थान प्रायः जीवनकाल का अर्थ है। कई भाषाओं में, [[वैश्विक चर]] सदैव स्थैतिक होते हैं, किन्तु कुछ भाषाओं में वे गतिशील होते हैं, जबकि [[स्थानीय चर]] सामान्यतः स्वचालित होते हैं, किन्तु स्थैतिक हो सकते हैं। | ||
सामान्य रूप में,{{visible anchor| | सामान्य रूप में,{{visible anchor|स्थैतिक मेमोरी आवंटन}} [[संकलन समय]] पर मेमोरी का आवंटन होता है, संबंधित प्रोग्राम के निष्पादित होने से पूर्व, डायनेमिक मेमोरी आवंटन या [[स्वचालित मेमोरी आवंटन]] के विपरीत जहां मेमोरी को रन टाइम (प्रोग्राम जीवनचक्र चरण) में आवश्यकतानुसार आवंटित किया जाता है।<ref>{{cite web | ||
| access-date = 2011-06-16 | | access-date = 2011-06-16 | ||
| author = Jack Rons | | author = Jack Rons | ||
Line 19: | Line 18: | ||
{{quote | {{quote | ||
|घोषणा को अतिरिक्त घोषणाकर्ता '''स्वयं''' के साथ चिह्नित किया जा सकता है। इसका निम्न प्रभाव है, ब्लॉक में प्रवेश करने पर, '''स्वयं''' मात्रा के मान उनके मूल्यों से अपरिवर्तित रहेंगे, अंतिम निकास, जबकि घोषित चर के मान जो '''स्वयं''' के साथ चिह्नित नहीं हैं, अपरिभाषित हैं।|ऐल्गॉल 60 पर संशोधित रिपोर्ट, खंड "5 में घोषणाएं", पी-14 हैं।}} | |घोषणा को अतिरिक्त घोषणाकर्ता '''स्वयं''' के साथ चिह्नित किया जा सकता है। इसका निम्न प्रभाव है, ब्लॉक में प्रवेश करने पर, '''स्वयं''' मात्रा के मान उनके मूल्यों से अपरिवर्तित रहेंगे, अंतिम निकास, जबकि घोषित चर के मान जो '''स्वयं''' के साथ चिह्नित नहीं हैं, अपरिभाषित हैं।|ऐल्गॉल 60 पर संशोधित रिपोर्ट, खंड "5 में घोषणाएं", पी-14 हैं।}} | ||
यह परिभाषा | यह परिभाषा स्थैतिक चर से अत्यधिक भिन्न है, यह केवल व्यवहार को निर्दिष्ट करती है, एवं इसलिए आजीवन, भंडारण स्वयं के चर को आवंटित किया जा सकता है, जब किसी फ़ंक्शन को प्रथम बार कॉल किया जाता है, उदाहरण के लिए, प्रोग्राम लोड समय के अतिरिक्त किया जाता है। | ||
इन चरों को संदर्भित करने के लिए | इन चरों को संदर्भित करने के लिए स्थैतिक शब्द का उपयोग कम से कम [[बीसीपीएल]] (1966) तक होता है, एवं [[सी प्रोग्रामिंग भाषा]] द्वारा लोकप्रिय किया गया है, जो बीसीपीएल से अत्यधिक प्रभावित था। बीसीपीएल परिभाषा पढ़ती है: | ||
{{quote | {{quote | ||
|(1) | |(1) स्टेटिक डेटा आइटम:<br>वे डेटा आइटम जिनकी सीमा प्रोग्राम के निष्पादन समय तक रहती है; इस प्रकार के डेटा आइटम में निरंतर अंतराल दिखाई देते हैं। वैश्विक घोषणा में या कोलन द्वारा निर्धारित लेबल के रूप में प्रत्येक स्थैतिक डेटा आइटम को या तो फ़ंक्शन या नियमित परिभाषा में घोषित किया जाना चाहिए।|बीसीपीएल संदर्भ नियमावली, 7.2 अंतरिक्ष आवंटन और डेटा | ||
| | क्षेत्र की सीमा}} | ||
ध्यान दें कि बीसीपीएल ने गतिशील डेटा आइटम को परिभाषित किया है जिसे अब स्वचालित चर (स्थानीय, स्टैक-आवंटित) कहा जाता है, समूह-आवंटित वस्तुओं के लिए नहीं, जो कि गतिशील आवंटन शब्द का वर्तमान उपयोग है। | |||
<code>static</code> C एवं संबंधित भाषाओं में स्थैतिक चर एवं अन्य अवधारणाओं दोनों के लिए कीवर्ड का उपयोग किया जाता है। | |||
== संबोधित करना == | == संबोधित करना == | ||
निरपेक्ष एड्रेस [[एड्रेसिंग मोड]] का उपयोग केवल स्थैतिक चर के साथ किया जा सकता है, क्योंकि वे एकमात्र प्रकार के चर हैं जिनका स्थान संकलन समय पर संकलक द्वारा जाना जाता है। जब प्रोग्राम ([[निष्पादन]] योग्य या [[ पुस्तकालय (कम्प्यूटिंग) ]]) मेमोरी में [[लोडर (कंप्यूटिंग)]] होता है, तो स्थैतिक चर प्रोग्राम के एड्रेस स्पेस (एप्लिकेशन प्रोग्रामिंग) (यदि आरंभिक हो), या [[बीएसएस खंड]] (यदि गैर-प्रारंभिक) के [[डेटा खंड]] में संग्रहीत होते हैं। एवं लोड करने से | निरपेक्ष एड्रेस [[एड्रेसिंग मोड]] का उपयोग केवल स्थैतिक चर के साथ किया जा सकता है, क्योंकि वे एकमात्र प्रकार के चर हैं जिनका स्थान संकलन समय पर संकलक द्वारा जाना जाता है। जब प्रोग्राम ([[निष्पादन]] योग्य या [[ पुस्तकालय (कम्प्यूटिंग) ]]) मेमोरी में [[लोडर (कंप्यूटिंग)]] होता है, तो स्थैतिक चर प्रोग्राम के एड्रेस स्पेस (एप्लिकेशन प्रोग्रामिंग) (यदि आरंभिक हो), या [[बीएसएस खंड]] (यदि गैर-प्रारंभिक) के [[डेटा खंड]] में संग्रहीत होते हैं। एवं लोड करने से पूर्व [[वस्तु फ़ाइल]] के संगत अनुभागों में संग्रहीत किए जाते हैं। | ||
== | == क्षेत्र == | ||
{{see also| | {{see also|चर (कंप्यूटर विज्ञान)#क्षेत्र एवं सीमा}} | ||
वेरिएबल (कंप्यूटर साइंस) | वेरिएबल (कंप्यूटर साइंस) क्षेत्र एवं सीमा के संदर्भ में, स्टैटिक वेरिएबल्स में प्रोग्राम के पूर्ण रन की सीमा होती है, किन्तु इसका क्षेत्र अधिक सीमित (कंप्यूटर साइंस) हो सकता है। मूल अंतर स्थैतिक वैश्विक चर के मध्य है, जिसका वैश्विक क्षेत्र है एवं इस प्रकार यह पूर्ण कार्यक्रम के संदर्भ में है, एवं [[स्थिर स्थानीय चर|स्थैतिक स्थानीय चर]], जिसका स्थानीय क्षेत्र है। स्थानीय चर से भिन्न होता है क्योंकि स्थैतिक स्थानीय चर को केवल आरंभ किया जाता है, संभवता जितनी बार जिस फ़ंक्शन में रहता है उसका आह्वान किया जाता है एवं इसके मूल्य को बनाए रखा जाता है एवं उस फ़ंक्शन को कई कॉल के माध्यम से एक्सेस किया जाता है जिसमें इसे घोषित किया जाता है। , उदा. गिनती चर के रूप में उपयोग करने के लिए स्थैतिक चर में [[ मॉड्यूल गुंजाइश | मापांक क्षेत्र]] या कुछ प्रकार भी हो सकते हैं, जैसे सी प्रोग्रामिंग भाषा में आंतरिक संपर्क, जो फ़ाइल क्षेत्र या मापांक क्षेत्र का रूप होता है। | ||
=== उदाहरण === | === उदाहरण === | ||
सी में | सी में स्थैतिक स्थानीय चर का उदाहरण: | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
#include <stdio.h> | #include <stdio.h> | ||
Line 64: | Line 64: | ||
== वस्तु-उन्मुख प्रोग्रामिंग == | == वस्तु-उन्मुख प्रोग्रामिंग == | ||
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग ]] में, | [[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |वस्तु ओरिएंटेड प्रोग्रामिंग]] में, [[स्थैतिक [[सदस्य चर]]]] की अवधारणा भी होती है, जो कि स्थैतिक रूप से परिभाषित वर्ग का [[वर्ग चर]] होता है, अर्थात, किसी दिए गए वर्ग का सदस्य चर जो सभी [[वर्ग उदाहरण]] में विचार किया जाता है, एवं इन वस्तुओं के सदस्य चर के रूप में पहुँचा जा सकता है। गतिशील रूप से परिभाषित वर्ग का वर्ग चर, उन भाषाओं में जहाँ कक्षाओं को रन टाइम पर परिभाषित किया जा सकता है, तब आवंटित किया जाता है जब वर्ग परिभाषित होता है एवं स्थैतिक नहीं होता है। | ||
संकलन-समय पर ज्ञात वस्तु | संकलन-समय पर ज्ञात वस्तु स्थैतिकांक, जैसे कि तार शाब्दिक, सामान्यतः स्थैतिक रूप से आवंटित किए जाते हैं। वस्तु-ओरिएंटेड प्रोग्रामिंग में, कक्षाओं के [[ आभासी विधि तालिका |आभासी विधि तालिका]] सामान्यतः स्थैतिक आवंटित किए जाते हैं। स्थाई रूप से परिभाषित मूल्य वैश्विक चर भी हो सकता है, यह सुनिश्चित करने के लिए [[अपरिवर्तनीय वस्तु]] मूल्य का उपयोग स्थैतिकता के लिए किया जाता है। | ||
== यह भी देखें == | == यह भी देखें == | ||
* [[लगातार (कंप्यूटर प्रोग्रामिंग)]] | * [[लगातार (कंप्यूटर प्रोग्रामिंग)|निरंतर (कंप्यूटर प्रोग्रामिंग)]] | ||
* वैश्विक चर | * वैश्विक चर | ||
* [[स्थैतिक विधि]] | * [[स्थैतिक विधि]] | ||
Line 84: | Line 84: | ||
{{refend}} | {{refend}} | ||
{{DEFAULTSORT:Static Memory Allocation}} | |||
{{DEFAULTSORT:Static Memory Allocation}} | |||
[[Category: | [[Category:Articles with hatnote templates targeting a nonexistent page|Static Memory Allocation]] | ||
[[Category:Created On 15/05/2023]] | [[Category:Collapse templates|Static Memory Allocation]] | ||
[[Category:Created On 15/05/2023|Static Memory Allocation]] | |||
[[Category:Lua-based templates|Static Memory Allocation]] | |||
[[Category:Machine Translated Page|Static Memory Allocation]] | |||
[[Category:Navigational boxes| ]] | |||
[[Category:Navigational boxes without horizontal lists|Static Memory Allocation]] | |||
[[Category:Pages with script errors|Static Memory Allocation]] | |||
[[Category:Sidebars with styles needing conversion|Static Memory Allocation]] | |||
[[Category:Template documentation pages|Documentation/doc]] | |||
[[Category:Templates Vigyan Ready|Static Memory Allocation]] | |||
[[Category:Templates generating microformats|Static Memory Allocation]] | |||
[[Category:Templates that add a tracking category|Static Memory Allocation]] | |||
[[Category:Templates that are not mobile friendly|Static Memory Allocation]] | |||
[[Category:Templates that generate short descriptions|Static Memory Allocation]] | |||
[[Category:Templates using TemplateData|Static Memory Allocation]] | |||
[[Category:Wikipedia metatemplates|Static Memory Allocation]] | |||
[[Category:चर (कंप्यूटर विज्ञान)|Static Memory Allocation]] | |||
[[Category:स्मृति प्रबंधन|Static Memory Allocation]] |
Latest revision as of 16:17, 30 October 2023
कंप्यूटर प्रोग्रामिंग में, स्थैतिक चर (प्रोग्रामिंग) है जो "स्थैतिक रूप " से आवंटित किया गया है, जिसका अर्थ है कि इसका जीवनकाल (या सीमा) कार्यक्रम का संपूर्ण भाग है। यह अल्पकालिक स्वचालित चर के विपरीत है, जिसका भंडारण स्टैक आवंटित एवं कॉल स्टैक पर विस्थापित किया गया है, एवं वस्तु (कंप्यूटर विज्ञान) के विपरीत, जिसका भंडारण गतिशील रूप से आवंटित किया जाता है एवं हीप मेमोरी में विस्थापित किया जाता है।
चर जीवनकाल क्षेत्र (कंप्यूटर विज्ञान) (जहां चर का उपयोग किया जा सकता है) के विपरीत है: वैश्विक एवं स्थानीय परिधि को संदर्भित करता है, जीवनकाल नहीं, किन्तु स्थान प्रायः जीवनकाल का अर्थ है। कई भाषाओं में, वैश्विक चर सदैव स्थैतिक होते हैं, किन्तु कुछ भाषाओं में वे गतिशील होते हैं, जबकि स्थानीय चर सामान्यतः स्वचालित होते हैं, किन्तु स्थैतिक हो सकते हैं।
सामान्य रूप में,स्थैतिक मेमोरी आवंटन संकलन समय पर मेमोरी का आवंटन होता है, संबंधित प्रोग्राम के निष्पादित होने से पूर्व, डायनेमिक मेमोरी आवंटन या स्वचालित मेमोरी आवंटन के विपरीत जहां मेमोरी को रन टाइम (प्रोग्राम जीवनचक्र चरण) में आवश्यकतानुसार आवंटित किया जाता है।[1]
इतिहास
स्थैतिक चर कम से कम ऐल्गॉल 60 (1960) तक दिनांकित होते हैं, जहाँ उन्हें स्वयं के चर के रूप में जाना जाता है।
घोषणा को अतिरिक्त घोषणाकर्ता स्वयं के साथ चिह्नित किया जा सकता है। इसका निम्न प्रभाव है, ब्लॉक में प्रवेश करने पर, स्वयं मात्रा के मान उनके मूल्यों से अपरिवर्तित रहेंगे, अंतिम निकास, जबकि घोषित चर के मान जो स्वयं के साथ चिह्नित नहीं हैं, अपरिभाषित हैं।
— ऐल्गॉल 60 पर संशोधित रिपोर्ट, खंड "5 में घोषणाएं", पी-14 हैं।
यह परिभाषा स्थैतिक चर से अत्यधिक भिन्न है, यह केवल व्यवहार को निर्दिष्ट करती है, एवं इसलिए आजीवन, भंडारण स्वयं के चर को आवंटित किया जा सकता है, जब किसी फ़ंक्शन को प्रथम बार कॉल किया जाता है, उदाहरण के लिए, प्रोग्राम लोड समय के अतिरिक्त किया जाता है।
इन चरों को संदर्भित करने के लिए स्थैतिक शब्द का उपयोग कम से कम बीसीपीएल (1966) तक होता है, एवं सी प्रोग्रामिंग भाषा द्वारा लोकप्रिय किया गया है, जो बीसीपीएल से अत्यधिक प्रभावित था। बीसीपीएल परिभाषा पढ़ती है:
(1) स्टेटिक डेटा आइटम:
वे डेटा आइटम जिनकी सीमा प्रोग्राम के निष्पादन समय तक रहती है; इस प्रकार के डेटा आइटम में निरंतर अंतराल दिखाई देते हैं। वैश्विक घोषणा में या कोलन द्वारा निर्धारित लेबल के रूप में प्रत्येक स्थैतिक डेटा आइटम को या तो फ़ंक्शन या नियमित परिभाषा में घोषित किया जाना चाहिए।— बीसीपीएल संदर्भ नियमावली, 7.2 अंतरिक्ष आवंटन और डेटा क्षेत्र की सीमा
ध्यान दें कि बीसीपीएल ने गतिशील डेटा आइटम को परिभाषित किया है जिसे अब स्वचालित चर (स्थानीय, स्टैक-आवंटित) कहा जाता है, समूह-आवंटित वस्तुओं के लिए नहीं, जो कि गतिशील आवंटन शब्द का वर्तमान उपयोग है।
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;
}
वस्तु-उन्मुख प्रोग्रामिंग
वस्तु ओरिएंटेड प्रोग्रामिंग में, [[स्थैतिक सदस्य चर]] की अवधारणा भी होती है, जो कि स्थैतिक रूप से परिभाषित वर्ग का वर्ग चर होता है, अर्थात, किसी दिए गए वर्ग का सदस्य चर जो सभी वर्ग उदाहरण में विचार किया जाता है, एवं इन वस्तुओं के सदस्य चर के रूप में पहुँचा जा सकता है। गतिशील रूप से परिभाषित वर्ग का वर्ग चर, उन भाषाओं में जहाँ कक्षाओं को रन टाइम पर परिभाषित किया जा सकता है, तब आवंटित किया जाता है जब वर्ग परिभाषित होता है एवं स्थैतिक नहीं होता है।
संकलन-समय पर ज्ञात वस्तु स्थैतिकांक, जैसे कि तार शाब्दिक, सामान्यतः स्थैतिक रूप से आवंटित किए जाते हैं। वस्तु-ओरिएंटेड प्रोग्रामिंग में, कक्षाओं के आभासी विधि तालिका सामान्यतः स्थैतिक आवंटित किए जाते हैं। स्थाई रूप से परिभाषित मूल्य वैश्विक चर भी हो सकता है, यह सुनिश्चित करने के लिए अपरिवर्तनीय वस्तु मूल्य का उपयोग स्थैतिकता के लिए किया जाता है।
यह भी देखें
टिप्पणियाँ
- ↑ 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.
संदर्भ
- Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language (2nd ed.). Upper Saddle River, NJ: Prentice Hall PTR. ISBN 0-13-110362-8.
- The C++ Programming Language (special edition) by Bjarne Stroustrup (Addison Wesley, 2000; ISBN 0-201-70073-5)