2016-06-03 13 views
5

के बड़े सरणी के साथ चरम मेमोरी उपयोग 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 एमबी मेमोरी की आवश्यकता होनी चाहिए।

किसी भी

+0

'यह मेरी सभी रैम का उपयोग करता है और मेरे कंप्यूटर को दुर्घटनाग्रस्त करता है' यदि जीसीसी ऐसा करता है, तो यह स्पष्ट रूप से एक कंपाइलर बग है। – user6412786

+0

आकर्षक। मुझे लगता है कि जीसीसी 'टेस्ट' कक्षा में 'फू' के चार मिलियन उदाहरणों में से प्रत्येक को शुरू करने के लिए कोड उत्पन्न करके ऑब्जेक्ट के लिए एक कन्स्ट्रक्टर बनाने का प्रयास कर रहा है। डुनो क्यों जीसीसी इसे दूसरे उदाहरण में ऐसा नहीं कर सकता है। अनुलेख 'क्लास टेस्ट' को 16 एमबी मेमोरी, 4 मिलियन * 4 बाइट प्रति इंट की आवश्यकता होनी चाहिए। –

+0

यह अप्रत्याशित कोड उत्पन्न करने के लिए बहुत ही अनुचित नहीं है और फिर इसे अनुकूलित करें। हालांकि, जाहिर है, यह इस मामले में नाटकीय रूप से उप-परिणाम प्राप्त करता है। –

उत्तर

-2

यह निश्चित रूप से एक बग है। मैं इसे अपने सिस्टम पर 5.3 के साथ पुन: पेश कर सकता हूं। राम उपयोग तेजी से बढ़ता है, लेकिन मैंने प्रोग्राम बंद कर दिया क्योंकि मैं नहीं चाहता कि मेरा सिस्टम क्रैश हो। दूसरी ओर, अगर मैं इसे क्लैंग 3.8 में संकलित करता हूं, तो यह लगभग तुरंत संकलित होता है।

मैं यह रिपोर्ट gcc.gnu.org/bugzilla को रिपोर्ट करने का सुझाव देता हूं। indicated here बग रिपोर्ट 5965 9, 68203, और 56671 पर एक नज़र डालें। मुझे पूरा यकीन है कि वे सभी जीसीसी की गैर-तुच्छ वर्ग प्रकार की एक बड़ी श्रृंखला रखने में असमर्थता की एक ही समस्या को इंगित करते हैं।

+1

"यह निश्चित रूप से एक बग है"। प्रमाण? –

+0

इसके अलावा आप मूल रूप से [इस] (http://stackoverflow.com/questions/37260097/stdarray-with-aggregate-initialization-on-g-generates-huge-code) प्रश्न से उत्तर की प्रतिलिपि बनाते हैं। आप तारीफ के काबिल है। –