जब मैं malloc()
एस और free()
एस यादृच्छिक रूप से, नेस्टेड और विभिन्न आकारों के साथ उपयोग करता हूं, तो कुछ बिंदु पर स्मृति को खंडित किया जाएगा क्योंकि ये ऑपरेशन छोटे स्मृति क्षेत्रों की एक बड़ी सूची छोड़ते हैं जो गैर-संगत होते हैं और इसलिए ' टी एक बड़े टुकड़े के रूप में आवंटित किया जाएगा।मेमोरी विखंडन
इस पर कुछ सवाल:
जब ऐसा अक्सर इतना है कि स्मृति खंडित होने के लिए मजबूर किया जाता है किया जाता है और उसके बाद सभी इन स्मृति क्षेत्रों
free()
घ हैं मैं मान सकते हैं इन मुक्त क्षेत्र हैं अपने मूल, संगत आकार में वापस सम्मिलित?जब मैं हमेशा एक
malloc()
एक ही स्मृति के लिएfree()
द्वारा पीछा किया है और कभी नहीं घोंसला इन कॉल करते हैं, स्मृति इस परिदृश्य में खंडित भी जब आवंटित/मुक्त कर दिया आकार हमेशा अलग हैं है?
यह सब कार्यान्वयन निर्भर है। लेकिन, हाँ, एक अच्छा मेमोरी मैनेजर संगत मुक्त मेमोरी भागों को जोड़ देगा। और, हां, यदि आप 'मॉलोक' करते हैं तो उसके बाद 'फ्री' होता है और आप किसी भी लाइब्रेरी फ़ंक्शंस को कॉल नहीं करते हैं जो 'malloc' को बीच में कॉल करता है, तो कोई विखंडन नहीं होना चाहिए। –
आप अपने प्रोग्राम http://www.valgrind.org के साथ वालग्रिंड चला सकते हैं और डेटा संरेखण त्रुटियों और मेमोरी लीक की जांच कर सकते हैं। –
64 बिट एड्रेस स्पेस को खंडित करना काफी कठिन है। निश्चित रूप से, आप इसे उस बिंदु पर आसानी से विभाजित कर सकते हैं जहां आप अब 10 टीबी ऑब्जेक्ट आवंटित नहीं कर सकते हैं, लेकिन संभवतः आपके पास 10 टीबी रैम नहीं है। – MSalters