आपने शायद बहुत अनुकूलित बनाया है।
अधिकांश आधुनिक प्रणालियों पर जीसीसी जानता है कि मॉलोक एक गैर-एलियाड पॉइंटर लौटाता है। ऐसा कहने के लिए, यह कभी भी एक ही सूचक को दो बार वापस नहीं करेगा और यह कभी भी उस सूचक को वापस नहीं करेगा जिसे आपने कहीं और 'लाइव' बचाया है।
मुझे यह कल्पना करना बहुत मुश्किल लगता है, लेकिन यह संभव है कि मॉलोक को एक बार बुलाया जा रहा है और इसके वापसी मूल्य का उपयोग किया जा रहा है। कारण:
यह जानता है कि आपकी याददाश्त एक मृत स्टोर है। यानी: आप इसे लिखते हैं, लेकिन इसे कभी नहीं पढ़ा जाता है। सूचक को एलियाड नहीं माना जाता है, इसलिए यह कहीं और से पढ़ने के लिए नहीं बच गया है, और यह अस्थिर चिह्नित नहीं है। लूप के लिए आपका/स्वयं/फेंक दिया जा सकता है।
उस बिंदु पर यह केवल उसी स्मृति का उपयोग कर सकता है।
अब मुझे विश्वास करना मुश्किल लगता है: जीसीसी को मॉलोक के बारे में कितना पता है? मॉलोक के किसी भी तरह के साइड इफेक्ट्स हो सकते हैं जैसे कि 'मेरे कमरे को नीले रंग की यादृच्छिक छाया' के लिए 'ग्लोबल' नामक कई बार 'बढ़ाना'। यह वास्तव में अजीब लगता है कि यह कॉल छोड़ देगा और इसे साइड-इफेक्ट-फ्री माना जाएगा। नरक, 'मॉलोक' को हर 100 वें कॉल को वापस करने के लिए लागू किया जा सकता है (शायद कल्पना करने के लिए काफी नहीं, लेकिन कौन कहना है)।
यह नहीं कर रहा है कि यह आपकी ओर से इसे मुक्त कर रहा है। यह 'चीजों को करने की अनुमति' के क्षेत्र में और उस क्षेत्र के क्षेत्र में जो कुछ भी हो सकता है उससे परे है। आपको स्मृति को रिसाव करने की इजाजत है, हालांकि यह हो सकता है।
2 चीजें यहां उपयोगी होंगी: 1) कंपाइल पर्यावरण वातावरण: जो ओएस, कंपाइलर, और कमांड लाइन झंडे।
और 2) अंतिम बाइनरी के पृथक्करण। (Objdump या संकलक से)
क्योंकि स्मृति सब शुरुआत में एक बार में आवंटित किया जाता है? –
@arasmussen 'while' लूप के अंदर। –
हो सकता है कि संकलक देखता है कि अब आपके पास उस सूचक पर कोई संभाल नहीं है (क्योंकि आप हर बार पीआरटी लिखते हैं) और इसके बाद आपके लिए सफाई कर रहे हैं? या शायद दस लाख पुनरावृत्तियों को चलाने में काफी समय लग रहा है? –