सी (या सी ++) में मैं सोच रहा हूं कि आंशिक रूप से स्मृति के ब्लॉक को डिलीकेट करना संभव है या नहीं।क्या आंशिक रूप से स्मृति को निष्क्रिय करना संभव है?
उदाहरण के लिए, हम आकार 100 की पूर्णांकों a
की एक सरणी बनाने के लिए,
int * a = malloc(sizeof(int)*100);
लगता है और फिर बाद में हम ऐसा a
आकार बदलने के लिए है कि यह बजाय 20 ints 100
है रखती चाहते वहाँ a
के केवल पिछले 80 * आकार (int) बाइट्स को मुक्त करने का एक तरीका? उदाहरण के लिए यदि हम रीयलोक को कॉल करते हैं, तो क्या यह स्वचालित रूप से ऐसा करेगा?
- मैं ऐसे समाधान की तलाश में हूं जिसमें पहले 20 इंट्स को स्थानांतरित/कॉपी करने की आवश्यकता न हो।
- वैकल्पिक रूप से, क्या आप समझा सकते हैं कि यह संभव क्यों होगा यदि यह संभव था, या ऐसा करने की क्षमता किसी भी भाषा में क्यों शामिल नहीं थी?
पुनर्विक्रय को सरणी की प्रतिलिपि नहीं करता है और फिर मूल को मुक्त करता है? – Cam
@ कैम, नहीं। मौजूदा क्षेत्र को कम करने की अनुमति है (और अक्सर होगा)। –
@ वाटसन 1180: ठीक है, लेकिन इसका अकेला मतलब कुछ भी नहीं है। सैद्धांतिक पुनर्विक्रय को ओ (एन!^99) समय लेने के लिए लागू किया जा सकता है और हमेशा आवश्यक स्मृति 500 गुना आवंटित किया जा सकता है, लेकिन हम निश्चित रूप से कारक नहीं करते हैं कि रीयलोक से जुड़े निर्णय लेने में। – Cam