मुझे एक प्रोजेक्ट मिला है जिसमें मुझे बड़ी फ़ाइलों को पढ़ने/लिखने की आवश्यकता है।दृश्य स्टूडियो पर std :: स्ट्रिंग का विशिष्ट व्यवहार?
मैंने ifstream :: read() का उपयोग करने का निर्णय लिया है ताकि उन फ़ाइलों को एक ही पास में एक std :: स्ट्रिंग में स्मृति में रखा जा सके। (कि सी में यह करने के लिए सबसे तेज़ तरीका ++ हो रहा है: http://insanecoding.blogspot.com/2011/11/how-to-read-in-file-in-c.html और http://insanecoding.blogspot.com/2011/11/reading-in-entire-file-at-once-in-c.html)
जब फ़ाइलों के बीच स्विच, मैं तो ("रीसेट" करने के लिए std :: स्ट्रिंग पिछले स्मृति बफर के रूप में इस्तेमाल की जरूरत है यानी, मिटा चार [] मुक्त स्मृति को बफ़र)
मैंने कोशिश की:
std::string::clear()
std::string::assign("")
std::string::erase(0, std::string::npos)
std::string::resize(0)
std::string::reserve(0)
लेकिन, विजुअल स्टूडियो 2008 के तहत, इस std :: स्ट्रिंग के अंदर ही इस्तेमाल किया स्मृति मुक्त नहीं करता है: उसके अंतर्निहित बफर आवंटित नहीं है।
एकमात्र तरीका जिसे मैंने इसे हटाने के लिए पाया है वह std :: string :: swap (std :: string ("")) को कॉल करना है ताकि वास्तविक std :: स्ट्रिंग और खाली एक के बीच आंतरिक बफर बदलना पड़े। परम में
मैं इस व्यवहार थोड़ा अजीब ...
मैं केवल विजुअल स्टूडियो 2008 पर परीक्षण किया, मैं अगर यह एक एसटीएल मानक व्यवहार नहीं जानता या अगर यह MSVC विशिष्ट है पाते हैं।
क्या आप मुझे कुछ सुराग प्राप्त कर सकते हैं?
स्वैपिंग कंटेनरों को आरक्षित स्मृति जारी करने का एक मानक तरीका है। और 'std :: string' का उपयोग कर फ़ाइल पढ़ने का तरीका इष्टतम तरीके से बंद है। –
@VladLazarenko: मानक, और संभवतः सबसे तेज़। – Nawaz
क्यों ** ** आप किसी को भी बफर को रद्द करने की उम्मीद करेंगे? सी ++ 11 डिसलोकेशन के लिए एक बाध्यकारी अनुरोध करने के लिए स्पष्ट 'shrink_to_fit() 'जोड़ता है। –