2012-01-18 10 views
6

मैं योजना के समान भाषा के लिए एक कंपाइलर विकसित कर रहा हूं, और डायबविग की थीसिस के माध्यम से पढ़ रहा हूं। इसमें, वह कहता है कि ढेर पर कॉल फ्रेम को आवंटित करके अपने अधिकांश प्रदर्शन लाभ को हासिल किया। वास्तव में इस काम को बंद करने और निरंतरता की उपस्थिति में करने के लिए कई चालें की जानी चाहिए।एक ढेर-आधारित योजना एक ढेर-आधारित योजना से धीमी गति से क्या बनाता है?

मेरा प्रश्न यह है कि यह प्रदर्शन लाभ कहां से आता है? क्या यह पूरी तरह से है क्योंकि हम कचरा कलेक्टर पर कम तनाव डालते हैं?

एक और तरीका रखें: मान लीजिए कि हमारे पास असीमित मात्रा में स्मृति है, आवंटित कॉल फ्रेम को ढेर करना अभी भी आवंटित कॉल फ्रेम ढेर से तेज होगा?

+0

आप "कचरा कलेक्टर" का जिक्र करते हैं - आपकी कार्यान्वयन भाषा क्या है? –

+0

मेरी कार्यान्वयन भाषा सी है लेकिन मुझे स्पष्टीकरण देना चाहिए, मेरा मतलब संकलित कोड के लिए प्रदर्शन लाभ था, * नहीं * संकलक के लिए प्रदर्शन लाभ। –

+4

वास्तव में एक उत्तर दें लेकिन: (ए) ढेर से निपटने में अधिक समय लगता है क्योंकि इसे स्कैन करने की आवश्यकता होती है (यह स्टैक की तरह रैखिक नहीं है); (बी) व्यावहारिक रूप से सभी सीपीयू आर्किटेक्चर ने जितनी जल्दी हो सके स्टैक एक्सेस बनाने पर अतिरिक्त जोर दिया, और ढेर के साथ ऐसा नहीं। –

उत्तर

4

मुझे लगता है कि एली ने आपके प्रश्न का उत्तर दिया, इसलिए मैं यहां अपनी टिप्पणी पेस्ट करने और इसके लिए क्रेडिट प्राप्त करने जा रहा हूं :)।

एली Barzilay लिखते हैं:

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

इसके लिए मैं कैश इलाके के बारे में सामान्य हाथ-लपेटना जोड़ूंगा। यही है, एक ढेर सभी क्रियाओं को स्मृति के बहुत छोटे हिस्से में रखता है, जो लगभग निश्चित रूप से कैश में रहेंगे।

+0

आपने मुझे हाथ से लहराते हुए भाग में रखा था ... –

+0

मैं भी ढेर पर कचरा संग्रह जोड़ना होगा एक ढेर इकट्ठा करने की तुलना में बहुत सस्ते (पॉपिंग फ्रेम)। – eljenso

0

एपेल ने paper लिखा था कि दावा आवंटन स्टैक आवंटन से तेज़ हो सकता है। गणितीय रूप से वह सही है, लेकिन वह अनदेखा करता है कि कैसे आधुनिक प्रोसेसर को स्टैक (कैश इलाके, कुशल स्टैक निर्देश इत्यादि) का उपयोग करने वाले कोड चलाने के लिए तैयार किया जाता है और ढेर के उपयोग में अधिक संकेत होते हैं (आधुनिक CPUs में खराब)।

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