2015-09-21 7 views
7

मैं धारणा है कि ऑब्जेक्टिव-सी में alloc (जब हम [anyObject alloc] आह्वान वास्तव में सी समारोह malloc और स्मृति लागू कर रहा है ढेर में आवंटित हो रही के तहत किया गया है, लेकिन खोजते समय नहीं कहीं भी इस बात के लिए इस सवाल का जवाब भी मिल सकता है।एलोक, मॉलोक, और एलोका - क्या अंतर है?

, alloc के लिए, मैं alloca जो ढेर में स्मृति आवंटित करता पाया। अगर मैं गलत नहीं हूँ, alloc वस्तुओं को बनाने के ढेर में स्मृति आवंटित करता है।

तो, क्या alloc और malloc (और alloca) के बीच का अंतर है? किसी को भी कृपया संक्षेप में प्रस्तुत कर सकते हैं

उत्तर

15

alloc() मानक सी लाइब्रेरी फ़ंक्शन नहीं है। कुछ पुराने कंपाइलर्स और पुस्तकालयों में <alloc.h> लाइब्रेरी होती है जो कुछ स्मृति आवंटन कार्यों को प्रदान करती है, लेकिन यह मानक नहीं है। माइक्रोसॉफ्ट विजुअल सी ++ रनटाइम में Alloc() फ़ंक्शन शामिल है जो कुछ हद तक malloc() जैसा है, लेकिन यह सी मानक का भी हिस्सा नहीं है।

malloc() प्रक्रिया ढेर पर स्मृति आवंटित करता है। malloc() का उपयोग करके आवंटित मेमोरी ढेर पर रहेगी जब तक कि इसे free() का उपयोग करके मुक्त नहीं किया जाता है।

alloca() वर्तमान फ़ंक्शन के स्टैक फ्रेम में स्मृति आवंटित करता है। वर्तमान फ़ंक्शन लौटने पर alloca() का उपयोग करके आवंटित स्मृति को स्टैक से निकाल दिया जाएगा। alloca() छोटे आवंटन तक ही सीमित है।

स्थितियां जहां alloca() उचित दुर्लभ हैं। लगभग सभी परिस्थितियों में, आपको स्मृति आवंटित करने के लिए malloc() का उपयोग करना चाहिए।

+2

"स्थिति जहां alloca() उपयुक्त है दुर्लभ हैं। लगभग सभी परिस्थितियों में, आपको स्मृति आवंटित करने के लिए malloc() का उपयोग करना चाहिए।" नहीं। सभी 'alloca() 'वैरिएबल लम्बाई सरणी प्रदान करता है। 'Int n = 6 के बीच कोई व्यावहारिक अंतर नहीं है; डबल एक्स [एन]; 'और 'int n = 6; डबल * एक्स = एलोका (एन * आकार (* एक्स)); 'केवल इतना ही नहीं, मल्टीथ्रेड प्रोग्राम में' malloc() 'का उपयोग एक गंभीर प्रदर्शन बाधा हो सकता है। –

+0

मेरी क्वेरी उद्देश्य-सी के संदर्भ में अधिक थी जो स्मृति को आवंटित करने के लिए '[[someObject alloc] init] लागू करती है और ऑब्जेक्ट को ढेर में प्रारंभ करती है। क्या यह '[someObject alloc]' पृष्ठभूमि में 'malloc' लागू करता है? –

+6

@AndrewHenle मैंने यह नहीं कहा कि * नहीं * स्थितियां हैं जहां 'alloca()' उपयुक्त है; मैंने कहा कि वे दुर्लभ हैं। वीएलए एक मामला है जहां वे उपयोगी हैं, लेकिन यहां तक ​​कि वे अनिवार्य रूप से एक अनुकूलन हैं। चूंकि ओपी स्पष्ट रूप से सी प्रोग्रामिंग के लिए नया है, इसलिए मैंने विवरण में गहराई से जाने का विकल्प नहीं चुना। :) – duskwuff

0

alloc फ़ंक्शन का उपयोग heap की लंबाई में किसी क्षेत्र या आकार बाइट्स को ब्लॉक करने के लिए किया जाता है।

malloc फ़ंक्शन का उपयोग heap संग्रहण आवंटित करने के लिए किया जाता है। इसका नाम स्मृति आवंटन के लिए है।

+0

कृपया इसे देखें [यूआरएल] (http://stackoverflow.com/help) यह आपकी गुणवत्ता को उठाने के लिए आसान होगा –

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