2013-08-05 5 views
10

साक्षात्कार प्रश्न पूछा:यह लूप कितनी बार चलेगा?

while(1) 
{ 
void * a = malloc(1024*1024); 
} 

कितनी बार इस लूप पर एक 2 gb राम और एक 8 gb राम चलेगा?

मैंने अनंत लूप कहा क्योंकि स्मृति समाप्त होने के बावजूद कोई समाप्ति स्थिति नहीं है। वह सहमत नहीं है। मुझे अब कोई विचार नहीं है। कृपया मदद करें।

+6

@ नोबिलिस अगर मेमोरी भर जाती है, तो 'malloc() 'रिटर्न' NULL'। –

+0

और क्यों एक नीचे वोट ??? –

+0

@ एच 2CO3 हाँ मैंने इसके बारे में सोचा और असल में यह गारंटी नहीं है कि यह segfault होगा क्योंकि मॉलोक कॉल केवल नल, वापस टिप्पणी को वापस रखेगा। – Nobilis

उत्तर

9

यह अनिश्चित काल तक चलना चाहिए। अधिकांश प्लेटफ़ॉर्म पर, जब कोई और मेमोरी उपलब्ध नहीं होती है, तो malloc() 0 वापस आ जाएगा, इसलिए लूप आवंटित स्मृति की मात्रा को बदले बिना चल रहा है। लिनक्स मेमोरी ओवर-प्रतिबद्धता की अनुमति देता है ताकि malloc() कॉल वर्चुअल मेमोरी में जोड़ना जारी रखे। प्रक्रिया को ओओएम किलर द्वारा अंततः मार दिया जा सकता है जब malloc() डेटा का उपयोग समस्याओं को उत्पन्न करने के लिए स्मृति शुरू करने के लिए करता है (ऐसा नहीं होगा क्योंकि आप आवंटित स्मृति का उपयोग करने का प्रयास करते हैं क्योंकि कोड इसका उपयोग नहीं करता है), लेकिन लिनक्स प्रश्न में मंच के रूप में निर्धारित नहीं है।

+0

ओओएम हत्यारा वास्तव में स्मृति में वास्तव में उपयोग किए जाने पर ही कार्रवाई करेगा। जब तक मैं स्मृति को याद रखता हूं, तब तक मुझे अनचाहे आवंटित किया जाता है, कुछ भी नहीं होना चाहिए। – glglgl

+0

एचएम, मैं गलत था। 1 एमआईबी मॉलोक आकार के साथ, प्रशासन डेटा इतना बड़ा हो जाता है कि अंत में वे 64 बिट सिस्टम पर स्मृति को भर देते हैं। 1 जीआईबी मॉलोक आकार के साथ, आभासी स्मृति आकार 107t ('शीर्ष' के अनुसार) पर चूस जाता है और कार्यक्रम अनिश्चित काल तक चलता है। – glglgl

+0

@glglgl: हाँ - लेकिन आप उस बिंदु तक पहुंच सकते हैं जहां 'malloc()' को आवंटित किए गए कार्यों की सूचियों को बनाए रखने के लिए स्मृति में लिखना है, और उस समय ओओएम किलर कार्रवाई में स्विंग कर सकता है। –

संबंधित मुद्दे