malloc() एक ऐसा फ़ंक्शन है जिसे आमतौर पर रनटाइम-लाइब्रेरी द्वारा कार्यान्वित किया जाता है। आप सही हैं, यदि आप किसी ऑपरेटिंग सिस्टम के शीर्ष पर चल रहे हैं, तो मॉलोक कभी-कभी (लेकिन हर बार नहीं) सिस्टम-कॉल को ट्रिगर करेगा जो ओएस को आपके प्रोग्राम के एड्रेस स्पेस में कुछ मेमोरी मैप करता है।
यदि आपका प्रोग्राम ऑपरेटिंग सिस्टम के बिना चलता है, तो आप अपने प्रोग्राम को ऑपरेटिंग सिस्टम के रूप में सोच सकते हैं। आपके पास सभी पते तक पहुंच है, जिसका अर्थ है कि आप केवल एक पॉइंटर को पता असाइन कर सकते हैं, फिर उस पॉइंटर को पढ़ने/लिखने के लिए संदर्भित करें।
बेशक
आप सुनिश्चित करें कि आपके कार्यक्रम के अन्य भागों नहीं सिर्फ एक ही स्मृति का उपयोग करने के लिए है, तो आप अपने खुद के स्मृति-प्रबंधक लिखें:
यह रखने के लिए बस आप सेट-अलग कर सकते हैं पतों की एक श्रेणी जो आपके "मेमोरी-मैनेजर" स्टोर करने के लिए उपयोग करता है कि कौन सी पता-सीमाएं पहले से उपयोग में हैं (वहां संग्रहित डेटास्ट्रक्चर एक लिंक्ड सूची या अधिक जटिल के रूप में आसान हो सकते हैं)। फिर आप एक समारोह लिखेंगे और इसे कॉल करेंगे उदा। malloc() जो आपके मेमोरी-मैनेजर का कार्यात्मक हिस्सा बनाता है। यह वर्णों का पता लगाने के लिए उल्लिखित डेटास्ट्रक्चर में दिखता है, जब तक कि तर्क निर्दिष्ट करता है और उस पर एक सूचक लौटाता है।
अब, यदि आपके प्रोग्राम में प्रत्येक फ़ंक्शन यादृच्छिक रूप से कस्टम पतों में लिखने के बजाय आपके malloc() को कॉल करता है तो आपने पहला कदम किया है। आप मुफ्त() -फंक्शन लिख सकते हैं जो निर्दिष्ट डेटास्ट्रक्चर में दिए गए सूचक की तलाश करेगा, और डेटास्ट्रक्चर को अनुकूलित करेगा (बेवकूफ लिंक्ड-सूची में यह दो लिंक मर्ज करेगा)।
स्रोत
2012-02-17 20:47:33
वास्तविक प्रश्न का उत्तर नहीं दिया: गतिशील रूप से आवंटित स्मृति कहां जाती है। यह ढेर में जाता है। ढेर कहां है? यह लिंकर स्क्रिप्ट द्वारा कॉन्फ़िगर एक पता श्रेणी में है। –
@fanl आपका प्रश्न लियो मेस्सी के प्रश्न से अलग है। क्या आपने -1 उत्तर दिया था? कृपया पूर्ववत करें। यदि आप अपना खुद का प्रश्न खोलते हैं तो मैं इसका जवाब देने की कोशिश करूंगा। –