से बाहर स्मृति को साफ़ नहीं करता है मुझे निम्नलिखित समस्या का सामना करना पड़ा है, और मुझे सच में यकीन नहीं है कि मैं गलत हूं या यह वास्तव में अजीब बग है। मैं तारों की एक विशाल सरणी भरता हूं और इसे एक निश्चित बिंदु पर साफ़ करना चाहता हूं। यहाँ एक न्यूनतम उदाहरणवेक्टर <string> स्कोप
#include <string>
#include <vector>
#include <unistd.h> //sleep
#include <iostream>
int main(){
{
std::vector<std::string> strvec;
for(long i = 0; i < 1000000; ++i){
std::string out = "This is gonna be a long string just to fill up the memory used by this fucking pthread\n";
strvec.push_back(out);
}
std::cout << "finished loading 1st\n";
sleep(10); // to monitor any changes
}
std::cout << "out of scope\n";
sleep(10);
return 0;
}
मेरे समस्या है, अगर मैं के साथ 'शीर्ष', स्मृति उपयोग कम हो जाती है सिर्फ एक बहुत छोटी राशि से (मुझे लगता है कि इसकी शायद वेक्टर भूमि के ऊपर) स्मृति के उपयोग पर नजर रखने के है, लेकिन सबसे अधिक नहीं लगता है मुक्त किया गया। कैसे? मैंने उसी परिदृश्य का परीक्षण 'लंबे समय तक' किया, लेकिन यहां सब ठीक हो गया।
std :: वेक्टर संदर्भ राज्य, कि, यदि निहित मान कोई पॉइंटर्स नहीं हैं, तो विनाशकों को बुलाया जाता है। स्ट्रिंग के लिए सच नहीं लगता है ...
मैं हर उत्तर की सराहना करता हूं।
धन्यवाद जवाब के लिए अब तक::
संपादित करें (सुविधा के लिए मैं ++ जी के साथ 4.7.2 डेबियन लिनक्स 64 बिट का उपयोग कर रहा हूँ)।
अब तक मैंने योनि मासफ के साथ ढेर का उपयोग किया है, और (हाँ, वास्तव में अपेक्षित) यह उस बिंदु पर ठीक से मुक्त हो जाता है। लेकिन मैं वास्तव में एक विशाल पूर्णांक के साथ उपयोग में परिवर्तन क्यों देखता हूं, लेकिन तारों के साथ नहीं (शीर्ष पर भी)?
मुझे इसके बारे में थोड़ा सा विचार करने की आवश्यकता है, क्योंकि मुझे मल्टीथ्रेडेड सर्वर एप्लिकेशन के लिए कुछ समय पर अपनी याददाश्त मुक्त करने में सक्षम होना चाहिए, जो संभवतः बिना किसी पुनरारंभ किए कई सप्ताह या अधिक चलाएगा। मुझे वास्तव में कब पता चलेगा कि सी ++ मेमोरी मैनेजर ओएस को वापस कुछ याद करने का फैसला करता है?
[valgrind] (http://valgrind.org/) के साथ डिबगिंग करने का प्रयास करें यह आपको बताएगा कि स्मृति मुक्त है या नहीं, और शायद 'शीर्ष' से अधिक सहायक होगी। – Couchy311
लोगों के आग्रह के साथ यह क्या है कि स्मृति बर्बाद हो जाती है? मुफ्त मेमोरी * कुछ नहीं * - यह स्मृति से बेहतर नहीं है जो कंप्यूटर में बिल्कुल नहीं है। उपयोग में * केवल स्मृति * कोई अच्छा है। –