2011-05-28 16 views
17

मूल रूप से @ एएलएस उत्तर here पर एक पैडेंटिक्स युद्ध, यह सी ++ चैटरूम में भी चर्चा की गई।ढेर और मुफ्त स्टोर के बीच क्या अंतर है?

This article हर्ब Sutter द्वारा दोनों के बीच अलग है, लेकिन एक भी अधिक दशक पुराना है, के रूप में यह स्पष्ट रूप से 2000 से पहले लिखा गया था और यह भी मानक मसौदा है, जो केवल मतलब हो सकता है सी ++ 98 मसौदा के बारे में बात करती है। हालांकि, मैं अभी भी इस सामान के बारे में जानकार होने के लिए समिति के हिस्से के रूप में हर्ब की अपेक्षा करता हूं।

मुझे this और this प्रश्न/उत्तर के बारे में पता है, लेकिन दूसरा सिर्फ हर्ब के लेख को उद्धृत करता है जबकि पहली बार एक अन्य स्रोत का हवाला देते हैं जो "ढेर" शब्द का उपयोग अस्वीकार करता है, उर्फ ​​वे दोनों बिल्कुल संतोषजनक नहीं हैं। इसके अलावा, मुझे SO पर कोई भी free-store या freestore टैग नहीं मिल रहा है (इस प्रश्न तक, मैंने अब पहले बनाया है)।

अब, वास्तव में अंतर है, यदि कोई है?

+1

http://stackoverflow.com/questions/1350819/c-free-store-vs-heap का डुप्लिकेट? – Andrei

+5

जांचें [Bjarne Stroustrup को इसके बारे में क्या कहना है] (http://zamanbakshifirst.blogspot.com/search/label/heap)। –

+0

@P्रासून: अच्छा लिंक! अब, आपने इसे उत्तर के रूप में क्यों नहीं पोस्ट किया? :) – Xeo

उत्तर

19

ठीक है, वर्तमान सी ++ मानक केवल "फ्री स्टोर" शब्द का उपयोग करता है - मानक में "ढेर" का एकमात्र उपयोग मानक पुस्तकालय में ढेर डेटा संरचना का वर्णन करना है। इसलिए "ढेर" सी ++ समस्याओं पर चर्चा करने की कोशिश करते समय उपयोग करने के लिए एक बहुत उपयोगी शब्द नहीं है, बेशक हर कोई ऐसा करता है।

+0

बिल्कुल मुझे क्या लगता है। +1 – Nawaz

+1

ठीक है, सी ++ 14 ड्राफ्ट के कुछ अनौपचारिक पाठ में "ढेर" की एक घटना थी और मैंने [इसे मिटा दिया] (https://github.com/cplusplus/draft/pull/380)। – FrankHB

5

free-store तकनीकी रूप से ढेर नहीं है, जैसे स्थानीय चर तकनीकी रूप से ढेर पर नहीं हैं। हालांकि, मेरे अनुभव में उन लोगों को ढूंढना बेहद दुर्लभ है जो उन शर्तों को स्वीकार नहीं करेंगे।

+0

.. + 1 (char [15]) – Nawaz

+0

कृपया स्पष्ट करें कि "स्थानीय चर तकनीकी रूप से ढेर पर नहीं हैं" का अर्थ क्या है। – Eight

+3

@ abhinav8: सी ++ एक उच्च स्तरीय प्रोग्रामिंग भाषा है जो भौतिक स्मृति स्थान के रूप में ऐसे कार्यान्वयन विवरण को दूर करता है। इस प्रकार, केवल सी ++ के बारे में बात करते समय, कोई stack_ नहीं है। –

13

हर्ब की पुस्तक "असाधारण सी ++" में उन्होंने परिभाषित करता है:

ढेर: एक गतिशील स्मृति क्षेत्र है कि आवंटित किया जाता है/malloc/free कार्यों से मुक्त कर दिया।

नि: शुल्क स्टोर: गतिशील स्मृति क्षेत्र जिसे new/delete द्वारा आवंटित/मुक्त किया गया है।

इसकी संभव

new और delete के लिए malloc और free के मामले में लागू किया जाना है, तो तकनीकी रूप से, वे एक ही स्मृति क्षेत्र हो सकता है। हालांकि, चूंकि मानक इसे निर्दिष्ट नहीं करता है, इसलिए उन्हें अलग से इलाज करने के लिए सबसे अच्छा है, और malloc/delete या new/free मिश्रण नहीं करना सबसे अच्छा है।

+0

.. + 1 (चार [15]) – Nawaz

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