के बड़े सरणी के साथ चरम मेमोरी उपयोग Sample 1
संकलित करते समय, यह मेरी सभी रैम का उपयोग करता है और मेरे कंप्यूटर को क्रैश करता है अभी तक Sample 2
ऐसा करने के बिना तुरंत संकलित करता है?ऑब्जेक्ट
नमूना 1:
class Foo
{
int a = 0;
};
class Test
{
Foo foo[4000000] = {};
};
int main()
{
Test t;
}
नमूना 2:
class Foo
{
int a = 0;
};
int main()
{
Foo foo[4000000] = {};
}
अन्त में, वहाँ जब संकलन रैम की टन का उपयोग करने से नमूना 1 को रोकने के लिए किसी भी तरह से है? मैं gcc version 5.3.0
का उपयोग कर रहा हूं और मैंने उपरोक्त संकलित -std=c++11
के साथ किया है। ध्यान दें कि class Test
केवल 16 एमबी मेमोरी की आवश्यकता होनी चाहिए।
किसी भी
'यह मेरी सभी रैम का उपयोग करता है और मेरे कंप्यूटर को दुर्घटनाग्रस्त करता है' यदि जीसीसी ऐसा करता है, तो यह स्पष्ट रूप से एक कंपाइलर बग है। – user6412786
आकर्षक। मुझे लगता है कि जीसीसी 'टेस्ट' कक्षा में 'फू' के चार मिलियन उदाहरणों में से प्रत्येक को शुरू करने के लिए कोड उत्पन्न करके ऑब्जेक्ट के लिए एक कन्स्ट्रक्टर बनाने का प्रयास कर रहा है। डुनो क्यों जीसीसी इसे दूसरे उदाहरण में ऐसा नहीं कर सकता है। अनुलेख 'क्लास टेस्ट' को 16 एमबी मेमोरी, 4 मिलियन * 4 बाइट प्रति इंट की आवश्यकता होनी चाहिए। –
यह अप्रत्याशित कोड उत्पन्न करने के लिए बहुत ही अनुचित नहीं है और फिर इसे अनुकूलित करें। हालांकि, जाहिर है, यह इस मामले में नाटकीय रूप से उप-परिणाम प्राप्त करता है। –