2008-08-28 21 views
6

मेरे पास सी ++ एसटीएल के बारे में एक (संभावित रूप से गूंगा) प्रश्न है। जब मैं एक कंटेनर (वेक्टर, सेट, मैप, इत्यादि) बनाता हूं, तो क्या इसे ढेर या ढेर पर आवंटित किया जाता है? अगर मैं एक सेट करता हूं और 5 मिलियन स्ट्रिंग डालता हूं, तो क्या मुझे स्टैक ओवरफ्लो के बारे में चिंता करनी होगी?सी ++ एसटीएल प्रश्न: आवंटक

उत्तर

9

डिफ़ॉल्ट रूप से एसटीएल कक्षाएं अपने आंतरिक बफर को ढेर से आवंटित करती हैं, हालांकि ये कक्षाएं कस्टम आवंटकों को भी अनुमति देती हैं जो उपयोगकर्ता को आवंटित करने के लिए वैकल्पिक स्थान निर्दिष्ट करने की अनुमति देती हैं - उदा। एक साझा स्मृति पूल।

3

एसटीएल कंटेनर के लिए डिफ़ॉल्ट आवंटक ऑपरेटर का उपयोग करता है और हटा देता है, इसलिए यह उस प्रकार के लिए जो भी मार्ग है, वह है। (सामान्यतः, यह ढेर से आता है जब तक कि आप इसे ओवरराइड करने के लिए कुछ नहीं करते हैं।)

आपको 5 मिलियन तार आवंटित करने से एक स्टैक ओवरफ़्लो नहीं मिलेगा। यहां तक ​​कि यदि आपने एक स्टैक आधारित आवंटक बनाया है, तो यह संभवतः एक स्ट्रिंग डालने से पहले भी बह जाएगा।

0

कंटेनर स्वयं आवंटित किया जाता है जहां आप निर्णय लेते हैं (यह ढेर, ढेर, ऑब्जेक्ट का सदस्य, आदि हो सकता है) लेकिन डिफ़ॉल्ट रूप से इसका उपयोग करने वाली स्मृति डिफ़ॉल्ट रूप से ली गई है (द्वारा प्रबंधित की गई नया और हटाएं) जो ढेर के समान नहीं है (मॉलोक/फ्री के माध्यम से प्रबंधित)।

Don't mix the two!

संबंधित मुद्दे