2009-12-26 15 views
14

संभव डुप्लिकेट:
C programming : How does free know how much to free?कैसे मुक्त() जानते हैं कि कितनी मेमोरी को हटाना है?

जब सी में प्रोग्रामिंग, मैं अक्सर malloc() का उपयोग स्मृति को आबंटित करने और free() इसे जारी करने:

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects); 
/** Do stuff **/ 
free(objArr); 

free() कैसे पता कितनी स्मृति करता है deallocate करने के लिए? क्या malloc() पॉइंटर्स को याद रखने के लिए कहीं भी एक टेबल बनाते हैं और प्रत्येक सूचक ने कितनी मेमोरी की ओर इशारा किया है?

यदि ऐसा है, तो क्या मैं free() विफल होगा अगर मैं सूचक का नाम बदलूं? उदा .:

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects); 
MyObject* newPtr= objArr; 
free(newPtr); /** Does this fail? **/ 

अगर मैं सूचक को बढ़ा देते हैं और फिर free() चलाने क्या होगा? उदा .:

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects); 
newPtr++; 
free(newPtr); /** What happens now? **/ 

यह स्मृति का एक अतिरिक्त हिस्सा पुनःआवंटन सिर्फ मूल सरणी के अंत होगा?

+3

का डुप्लिकेट http://stackoverflow.com/questions/1518711/c-programming-how-does-free-now-how-much-to- फ्री – codaddict

उत्तर

19

सबसे आम तरीका यह है कि यह आपके द्वारा वापस आने वाले पते से तुरंत कुछ जानकारी संग्रहीत करता है। इसलिए यदि मॉलोक 0x1004 पता भेजता है, आंतरिक रूप से, मॉलोक ने 0x0FFC पर मेमोरी शुरू कर दी होगी और 0xFFC - 0x1003 के बीच मेमोरी में कहीं भी आकार जैसे विभिन्न जानकारी संग्रहीत करेगी लेकिन आवेदन को आवंटन को 0x1004 पर शुरू किया जाएगा।

एकमात्र चीज जो मुफ्त में मायने रखती है वह वही पता प्राप्त कर रहा है जो मॉलोक लौटा है।

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