सी

2012-02-04 12 views
11

में एलोका फ़ंक्शन मैं सी को संशोधित कर रहा था और अंतरिक्ष जैसे स्टैक पर स्टोरेज आवंटित करने के रूप में वर्णित एलोका/फ्री फ़ंक्शंस में आया था। क्या यह मॉलोक/फ्री के समान है? या यह कुछ अलग है? धन्यवाद।सी

+0

निम्न लिंक सुझाव देता है कि 'alloc' एक अलग फ़ंक्शन है: http://cboard.cprogramming.com/c-programming/140380-k-r-5-6-stumped-again.html –

+0

मुझे लगता है कि आप सही हैं। मुझे लगता है कि इसका आवंटन का उनका उदाहरण कार्यान्वयन .. – Cemre

+0

आप के एंड आर को संशोधित कर रहे हैं? आपको शानदार होना चाहिए। – abelenky

उत्तर

22

मुझे लगता है कि आपका मतलब alloca है जिसका उपयोग स्टैक पर स्मृति आवंटित करने के लिए किया जाता है। और हाँ, यह malloc और free से अलग है जो ढेर पर आवंटित है।

alloca के साथ आवंटित स्मृति मुक्त करने का प्रयास न करें क्योंकि यह स्वचालित रूप से मुक्त हो जाता है जब alloca कॉल करने वाले फ़ंक्शन को अपने कॉलर पर लौटाया जाता है।

alloca और/या सी 99 परिवर्तनीय लंबाई सरणी का उपयोग करना एक जोखिम भरा व्यवसाय हो सकता है क्योंकि यदि आप इन उपकरणों का उपयोग अनावश्यक रूप से करते हैं तो आप आसानी से ढेर को ओवरफ्लो कर सकते हैं।

+4

तीसरे पैराग्राफ पर जोर नहीं दिया जा सकता है। 'एलोका' या वीएलए का उपयोग करने के लिए लगभग कोई सुरक्षित तरीका नहीं है। –

3

malloc, calloc और realloc कार्य ढेर पर स्थान आवंटित करते हैं।

free फ़ंक्शन "फ्री" स्थान पहले इन फ़ंक्शंस द्वारा आवंटित किया गया था।

0

पुराने उत्तर में कुछ अतिरिक्त जानकारी जोड़ना।

malloc() कुछ कारण के लिए इस्तेमाल किया जा सकता, उनमें से कुछ हैं

  1. गतिशील स्मृति आवंटन
  2. स्कोप

लेकिन, एक अतिरिक्त (जब एक स्मृति है कि समारोह कॉल के बीच रहता है की जरूरत है) malloc() के साथ जो काम जोड़ा जाता है, हमें आवंटित स्मृति free() स्पष्ट रूप से करना होगा।

तो, आदेश केवल गतिशील स्मृति आवंटन सुविधा का उपयोग करने, और free() की भूमि के ऊपर से बचने के लिए, एक alloca() उनके कार्यक्रम में उपयोग कर सकते हैं। यह संभव हो गया है क्योंकि alloca() का उपयोग होने पर स्मृति को स्टैक पर आवंटित किया जाता है (जैसा कि अन्य उत्तरों द्वारा उल्लिखित है)।

+0

@ निका मुझे आशा है कि हरिस ने किया था। मैंने इसे किसी भी मामले में तय किया। – cmaster