मैं स्ट्रॉस्ट्रप की सी ++ पीएल 4 पुस्तक अभ्यास अभ्यास करने की कोशिश कर रहा हूं। कार्य है:फ़ंक्शन bad_alloc अपवाद नहीं फेंकता
new
का उपयोग करके इतनी मेमोरी आवंटित करें किbad_alloc
फेंक दिया गया है। रिपोर्ट करें कि कितनी मेमोरी आवंटित की गई थी और कितना समय लगा। इसे दो बार करें: एक बार आवंटित स्मृति को नहीं लिख रहा है और एक बार प्रत्येक तत्व को लिख रहा है।
निम्नलिखित कोड std::bad_alloc
अपवाद नहीं फेंकता है। कार्यक्रम को निष्पादित करने के बाद मुझे टर्मिनल में "मार" संदेश मिलता है।
भी। निम्नलिखित कोड ~ 4 सेकंड में निकलता है। लेकिन जब मैं स्मृति उपयोग संदेश को अनमोल करता हूं
// ++i;
// std::cout << "Allocated " << i*80 << " MB so far\n";
प्रोग्राम कुछ मिनटों तक चलाएगा। कुछ समय बाद यह प्रिंट करता है कि स्मृति के टेराबाइट आवंटित किए गए हैं लेकिन मुझे सिस्टम मॉनिटर ऐप में ज्यादा बदलाव नहीं दिख रहा है। ऐसा क्यों है?
मैं उपयोग देखने के लिए लिनक्स और सिस्टम मॉनिटर ऐप का उपयोग करता हूं।
#include <iostream>
#include <vector>
#include <chrono>
void f()
{
std::vector<int*> vpi {};
int i {};
try{
for(;;){
int* pi = new int[10000];
vpi.push_back(pi);
// ++i;
// std::cout << "Allocated " << i*80 << " MB so far\n";
}
}
catch(std::bad_alloc){
std::cerr << "Memory exhausted\n";
}
}
int main() {
auto t0 = std::chrono::high_resolution_clock::now();
f();
auto t1 = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(t0-t1).count() << " ms\n";
}
आउटपुट एक साधारण स्मृति आवंटन से * अधिक * अधिक समय लेगा। यदि यह 2 मिनट तक चलता है, तो यह आउटपुट के लिए 1:56 हो सकता है और आवंटन के लिए अभी भी 4 सेकंड हो सकता है। –
वह मेरा अंतर्ज्ञान था। लेकिन यह क्यों प्रिंट करता है, मान लें, स्मृति के टेराबाइट अब तक आवंटित किए गए थे? – tomtom
संभावित डुप्लिकेट [प्रक्रिया के "असली" मेमोरी उपयोग, यानी निजी गंदे आरएसएस को निर्धारित करने का एक तरीका?] (Http://stackoverflow.com/questions/118307/a-way-to-determine-a-processs-real- मेमोरी-यूज-यानी-प्राइवेट-गंदे-आरएसएस) –