मेमोरी या तो स्थिर रूप से या गतिशील रूप से आवंटित किया गया है। गतिशील आवंटन वह होता है जो आपको रनटाइम पर स्मृति आवंटित करते समय मिलता है, उदाहरण के लिए new
और malloc
। स्टेटिक आवंटन "बाकी" है। कक्षा सदस्य चर के लिए मेमोरी क्लास इंस्टेंस के साथ आवंटित की जाती है, इसलिए यदि यह स्थिर रूप से आवंटित किया गया है, तो सदस्य स्मृति के उसी हिस्से में समाप्त होते हैं, और यदि गतिशील रूप से आवंटित किया जाता है, तो सदस्य गतिशील स्मृति रहते हैं। यह पॉइंटर सदस्य चर के लिए भी सच है, लेकिन वास्तविक स्मृति जो इसे इंगित करती है वह या तो गतिशील रूप से (new
और malloc
) या स्थाई रूप से आवंटित हो सकती है।
int i = 0;
int* pi = &i; // pi points at statically allocated memory
pi = new int(0); // pi points at dynamically allocated memory
इसलिए, यदि आप इसके लिए एक स्थिर वर्ग उदाहरण, स्मृति और उसके सदस्यों आमतौर पर कोड खंड में आवंटित है, लेकिन यह एक कार्यान्वयन विस्तार है।
यदि सदस्य एक सूचक है, जो गतिशील रूप से आवंटित स्मृति पर इंगित करता है, तो वह स्मृति होगी जहां प्रयुक्त आवंटक का निर्णय लेता है। "ढेर" गतिशील रूप से आवंटित स्मृति का सबसे आम कार्यान्वयन विवरण है, जिसे आप सामान्यतःnew
और malloc
का उपयोग करते समय प्राप्त करते हैं, लेकिन एक कस्टम आवंटक का उपयोग किया जा सकता है जो कोड सेगमेंट में कहीं और स्मृति को नियंत्रित करता है।
स्रोत
2015-04-16 08:58:46
एकमात्र उत्तर जो अब तक पोस्ट और पूर्व सी ++ 11 – senfen
में स्थिर चर के व्यवहार में अंतर बताता है, ठीक है, गैर-* हीप * वास्तव में गैर- * गतिशील * का मतलब है। यदि गति आवंटक का उपयोग किया जाता है तो गतिशील रूप से आवंटित ऑब्जेक्ट स्थिर खंड में भी हो सकते हैं। "हीप" एक कार्यान्वयन विवरण है जो सबसे ज्यादा उपयोग किया जाता है। –
सावधान रहें कि मुझे नहीं लगता कि विज़ुअल सी ++ वीएस2015 से पहले थ्रेड सुरक्षित स्थैतिक प्रारंभिकरण (जादू सांख्यिकी) लागू करता है। – sjdowling