क्या मानक सी ++ 11 में क्रैश किए बिना सिस्टम (x86, x64, PowerPC/Windows, Linux या MacOS) पर शेष उपलब्ध स्मृति प्राप्त करना संभव है?शेष उपलब्ध स्मृति को मानक C++ 11 में प्राप्त करें?
बहुत ही बड़े आकार से शुरू होने वाले बहुत बड़े सरणी आवंटित करने का प्रयास करने का एक बेवकूफ तरीका होगा, हर बार विफल होने पर अपवादों को पकड़ने और आकार को कम करने तक कोई अपवाद नहीं फेंक दिया जाता है। लेकिन शायद एक और अधिक कुशल/चालाक विधि है ...
संपादित करें 1: वास्तव में मुझे स्मृति की सटीक मात्रा की आवश्यकता नहीं है। मैं लगभग (100 एमबी की त्रुटि पट्टी) जानना चाहता हूं) जब मैं इसे शुरू करता हूं तो मेरा कोड कितना उपयोग कर सकता है।
संपादित करें 2: इस कोड के बारे में आप क्या सोचते हैं? क्या यह मेरे प्रोग्राम की शुरुआत में इसे चलाने के लिए सुरक्षित है या यह स्मृति को दूषित कर सकता है?
#include <iostream>
#include <array>
#include <list>
#include <initializer_list>
#include <stdexcept>
int main(int argc, char* argv[])
{
static const long long int megabyte = 1024*1024;
std::array<char, megabyte> content({{'a'}});
std::list<decltype(content)> list1;
std::list<decltype(content)> list2;
const long long int n1 = list1.max_size();
const long long int n2 = list2.max_size();
long long int i1 = 0;
long long int i2 = 0;
long long int result = 0;
for (i1 = 0; i1 < n1; ++i1) {
try {
list1.push_back(content);
}
catch (const std::exception&) {
break;
}
}
for (i2 = 0; i2 < n2; ++i2) {
try {
list2.push_back(content);
}
catch (const std::exception&) {
break;
}
}
list1.clear();
list2.clear();
result = (i1+i2)*sizeof(content);
std::cout<<"Memory available for program execution = "<<result/megabyte<<" MB"<<std::endl;
return 0;
}
क्षमा करें, इस बार "शायद" के दो संभावित परिणामों में से "नहीं" बाहर आ गया है। –
यह अत्यधिक मंच निर्भर है, और मानक में निपटा नहीं है। –
ऐसा करने के लिए कोई "मानक" तरीका नहीं है। यहां तक कि आपके द्वारा वर्णित विधि वैध परिणाम नहीं दे सकती है। आपको प्लेटफ़ॉर्म-विशिष्ट कार्यक्षमता का उपयोग करना होगा। –