में एलोका फ़ंक्शन मैं सी को संशोधित कर रहा था और अंतरिक्ष जैसे स्टैक पर स्टोरेज आवंटित करने के रूप में वर्णित एलोका/फ्री फ़ंक्शंस में आया था। क्या यह मॉलोक/फ्री के समान है? या यह कुछ अलग है? धन्यवाद।सी
सी
उत्तर
मुझे लगता है कि आपका मतलब alloca
है जिसका उपयोग स्टैक पर स्मृति आवंटित करने के लिए किया जाता है। और हाँ, यह malloc
और free
से अलग है जो ढेर पर आवंटित है।
alloca
के साथ आवंटित स्मृति मुक्त करने का प्रयास न करें क्योंकि यह स्वचालित रूप से मुक्त हो जाता है जब alloca
कॉल करने वाले फ़ंक्शन को अपने कॉलर पर लौटाया जाता है।
alloca
और/या सी 99 परिवर्तनीय लंबाई सरणी का उपयोग करना एक जोखिम भरा व्यवसाय हो सकता है क्योंकि यदि आप इन उपकरणों का उपयोग अनावश्यक रूप से करते हैं तो आप आसानी से ढेर को ओवरफ्लो कर सकते हैं।
तीसरे पैराग्राफ पर जोर नहीं दिया जा सकता है। 'एलोका' या वीएलए का उपयोग करने के लिए लगभग कोई सुरक्षित तरीका नहीं है। –
malloc
, calloc
और realloc
कार्य ढेर पर स्थान आवंटित करते हैं।
free
फ़ंक्शन "फ्री" स्थान पहले इन फ़ंक्शंस द्वारा आवंटित किया गया था।
पुराने उत्तर में कुछ अतिरिक्त जानकारी जोड़ना।
malloc()
कुछ कारण के लिए इस्तेमाल किया जा सकता, उनमें से कुछ हैं
- गतिशील स्मृति आवंटन
- स्कोप
लेकिन, एक अतिरिक्त (जब एक स्मृति है कि समारोह कॉल के बीच रहता है की जरूरत है) malloc()
के साथ जो काम जोड़ा जाता है, हमें आवंटित स्मृति free()
स्पष्ट रूप से करना होगा।
तो, आदेश केवल गतिशील स्मृति आवंटन सुविधा का उपयोग करने, और free()
की भूमि के ऊपर से बचने के लिए, एक alloca()
उनके कार्यक्रम में उपयोग कर सकते हैं। यह संभव हो गया है क्योंकि alloca()
का उपयोग होने पर स्मृति को स्टैक पर आवंटित किया जाता है (जैसा कि अन्य उत्तरों द्वारा उल्लिखित है)।
@ निका मुझे आशा है कि हरिस ने किया था। मैंने इसे किसी भी मामले में तय किया। – cmaster
निम्न लिंक सुझाव देता है कि 'alloc' एक अलग फ़ंक्शन है: http://cboard.cprogramming.com/c-programming/140380-k-r-5-6-stumped-again.html –
मुझे लगता है कि आप सही हैं। मुझे लगता है कि इसका आवंटन का उनका उदाहरण कार्यान्वयन .. – Cemre
आप के एंड आर को संशोधित कर रहे हैं? आपको शानदार होना चाहिए। – abelenky