आपके प्रोफेसर एक महत्वपूर्ण बिंदु उठा रहे हैं। दुर्भाग्य से अंग्रेजी का उपयोग ऐसा है कि मैं बिल्कुल निश्चित नहीं हूं कि यह क्या है। मुझे गैर-खिलौना कार्यक्रमों के संदर्भ में प्रश्न का उत्तर दें जिनकी कुछ स्मृति उपयोग विशेषताएं हैं, और यह कि मैंने व्यक्तिगत रूप से काम किया है।
कुछ कार्यक्रम अच्छी तरह से व्यवहार करते हैं। वे तरंगों में स्मृति आवंटित करते हैं: बहुत सारे छोटे या मध्यम आकार के आवंटन, जिसके बाद बहुत सी मुक्तियां होती हैं, चक्रों को दोहराते हुए। इन कार्यक्रमों में विशिष्ट मेमोरी एलोकेटर्स अच्छी तरह से करते हैं। वे मुक्त ब्लॉकों को समेटते हैं और एक लहर के अंत में अधिकांश मुक्त स्मृति बड़े सन्निहित चक्रों में होती है। ये कार्यक्रम काफी दुर्लभ हैं।
अधिकांश कार्यक्रम बुरी तरह से व्यवहार करते हैं। वे बहुत कम से लेकर बहुत बड़े आकार में विभिन्न प्रकार के आकारों में अधिक या कम बेतरतीब ढंग से मेमोरी को आवंटित और डील करते हैं, और वे आवंटित ब्लॉकों के उच्च उपयोग को बनाए रखते हैं। इन कार्यक्रमों में ब्लॉक को समतल करने की क्षमता सीमित होती है और समय के साथ वे उच्च खंडित और अपेक्षाकृत गैर-सन्निहित स्मृति के साथ समाप्त हो जाते हैं। यदि कुल मेमोरी का उपयोग 32-बिट मेमोरी स्पेस में लगभग 1.5GB से अधिक है, और 10MB या उससे अधिक के आवंटन हैं, तो अंततः बड़े आवंटन में से एक विफल हो जाएगा। ये कार्यक्रम आम हैं।
अन्य कार्यक्रम मुफ्त या कम मेमोरी नहीं देते हैं, जब तक कि वे बंद न हो जाएं। वे क्रमिक रूप से मेमोरी को आवंटित करते हैं, जबकि केवल छोटी मात्रा को मुक्त करते हैं, और फिर बंद हो जाते हैं, जिस समय सभी मेमोरी को मुक्त कर दिया जाता है। एक कंपाइलर इस तरह है। तो एक वी.एम. उदाहरण के लिए, .NET CLR रनटाइम, जो स्वयं C ++ में लिखा गया है, शायद कभी भी किसी भी मेमोरी को मुक्त नहीं करता है। क्यों करना चाहिए?
और वह अंतिम उत्तर है। उन मामलों में जहां कार्यक्रम मेमोरी उपयोग में पर्याप्त रूप से भारी है, तो मेमोरी का उपयोग करते हुए मॉलोक और मुफ्त में समस्या का पर्याप्त जवाब नहीं है। जब तक आप एक अच्छी तरह से व्यवहार किए गए कार्यक्रम से निपटने के लिए पर्याप्त भाग्यशाली नहीं होते हैं, आपको एक या एक से अधिक कस्टम मेमोरी एलोकेटर डिज़ाइन करने की आवश्यकता होगी जो आपकी पसंद की रणनीति के अनुसार मेमोरी के बड़े हिस्से को पूर्व-आवंटित करते हैं और फिर उप-आवंटित करते हैं। जब प्रोग्राम बंद हो जाता है, तब आप मुफ्त का उपयोग नहीं कर सकते हैं।
आपके प्रोफेसरों ने जो कहा, उसे जानने के बिना, वास्तव में उत्पादन पैमाने के कार्यक्रमों के लिए, मैं शायद उनकी तरफ से निकलूंगा।
संपादित करें
मैं कुछ आलोचनाओं का जवाब देने के लिए एक जाना होगा। जाहिर है कि एसओ इस तरह के पदों के लिए अच्छी जगह नहीं है। बस स्पष्ट होने के लिए: मेरे पास लगभग 30 वर्षों का अनुभव है इस तरह के सॉफ़्टवेयर को लिखना, जिसमें कुछ जोड़े भी शामिल हैं। मेरा कोई अकादमिक संदर्भ नहीं है, बस मेरे अपने विचार हैं। मैं उन लोगों की आलोचना को महसूस करने में मदद नहीं कर सकता, जिनके पास बहुत कम और कम अनुभव है।
मैं अपना मुख्य संदेश दोहराऊंगा: वास्तविक कार्यक्रमों में बड़े पैमाने पर स्मृति आवंटन के लिए मॉलोक और मुफ्त संतुलन पर्याप्त उपाय नहीं है। ब्लॉक कोलेसिंग सामान्य है, और समय खरीदता है, लेकिन यह पर्याप्त नहीं है। आपको गंभीर, चतुर मेमोरी एलोकेटर की आवश्यकता होती है, जो मेमोरी को चंक्स (मॉलोक या जो कुछ भी) का उपयोग करके हड़पते हैं और शायद ही कभी मुक्त होते हैं। शायद यही संदेश ओपी के प्रोफेसरों के दिमाग में था, जिसे उन्होंने गलत समझा।