मैंने पढ़ा है कि गतिशील लिंक पिछले सक्रियण रिकॉर्ड को इंगित करता है, इसलिए यह गतिशील स्कॉप्ड प्रोग्रामिंग भाषा में समझ में आता है। लेकिन स्थैतिक स्कॉप्ड प्रोग्रामिंग भाषा में, एक्सेस लिंक (जो एक निचले घोंसले स्तर में फ़ंक्शन का सक्रियण रिकॉर्ड इंगित करता है) पर्याप्त नहीं है? और विशेष रूप से सी में - एक्सेस लिंक की आवश्यकता क्यों नहीं है? और गतिशील लिंक की आवश्यकता क्यों है?फ़ंक्शन सक्रियण रिकॉर्ड में गतिशील लिंक क्यों आवश्यक है? (स्थिर स्कॉप्ड भाषा में)
उत्तर
मैं इस नामकरण जो मेरे लिए अधिक परिचित है का उपयोग करेगा:
सक्रियण रिकॉर्ड: ढेर फ्रेम
गतिशील लिंक: [बचाया] फ्रेम सूचक
तो , मैं आपके प्रश्न की व्याख्या करता हूं: फ्रेम पॉइंटर्स की आवश्यकता क्यों है? [1]
एक फ्रेम सूचक आवश्यक नहीं है।
कुछ कंपाइलर (उदाहरण के लिए ग्रीन हिल्स सी ++, जीसीसी के साथ -8) आम तौर पर एक उत्पन्न नहीं करते हैं या इसे उत्पन्न करने के लिए कहा जा सकता है (एमएसवीसी, जीसीसी)। call stack की
आसान traversing:
जिसके अनुसार, यह निश्चित रूप से करता है के अपने फायदे है पैदा करने के लिए एक stack trace एक लिंक्ड सूची जहां फ्रेम सूचक सिर रूपों traversing के रूप में के रूप में आसान है। स्टैक निशान और डिबगर्स को कार्यान्वित करना बहुत आसान बनाता है।
आसान कोड पीढ़ी: ढेर चर सभी समय बदलते ढेर सूचक के बजाय फ्रेम सूचक का अनुक्रमण से संदर्भित किया जा सकता है।प्रत्येक धक्का/पॉप के साथ ढेर सूचक परिवर्तन, फ्रेम सूचक एक समारोह (prologue/epilogue के बीच)
- चाहिए चीजें धराशायी हो जाना
, stack unwinding फ्रेम सूचक का उपयोग किया जा सकता है के भीतर स्थिर रहती है। इस प्रकार बोर्लैंड की संरचित अपवाद हैंडलिंग (एसईएच) काम करता है। विशेष रूप से
setjmp(3)
,alloca(3)
और C99-VLA (और आमतौर पर करते हैं) इस पर निर्भर हो सकता है के कार्यान्वयन: ढेर प्रबंधन सुव्यवस्थित।
कमियां:
- रजिस्टर उपयोग: एक 86 केवल 8 सामान्य प्रयोजन रजिस्टरों मिला है। इनमें से एक फ्रेम सूचक धारण करने के लिए पूरी तरह से समर्पित करने की आवश्यकता होगी।
- ओवरहेड: प्रत्येक कार्य के लिए प्रस्तावना/उपन्यास उत्पन्न होता है।
लेकिन जैसा कि आपने देखा, एक कंपाइलर फ्रेम पॉइंटर बनाए रखने के बिना पूरी तरह से ठीक कोड उत्पन्न कर सकता है।
[1] अगर वह क्या मतलब है नहीं है, विस्तृत करें।
शायद डायनामिक लिंक "डिस्प्ले लिंक" नहीं है "फ्रेम पॉइंटर" –
@ बेसिलस्टारनकेविच जिस तरह से मैं इसे समझता हूं, एक गतिशील लिंक अपने गतिशील पूर्ववर्ती (यानी कॉलर के सक्रियण फ्रेम) के साथ फ़ंक्शन के सक्रियण रिकॉर्ड को लिंक करता है। इसलिए मैंने इस सवाल को अर्थ के रूप में व्याख्या किया: हमें फ़्रेम पॉइंटर्स की आवश्यकता क्यों है। लेकिन मुझे पूरी तरह से यकीन नहीं है कि ओपी के मन में यह क्या है। मैंने इसे प्रतिबिंबित करने के लिए अपना जवाब संपादित किया। – a3f
आपका प्रश्न optimizing optionGCC से संबंधित हो सकता है, तो this देखें।
Btw, कई लोगों को कॉल फ्रेम (call stack में) क्या आप सक्रियण रिकॉर्ड नाम नामकरण कर रहे हैं। continuation की धारणा, और continuation passing style और A-normal form एस की बारीकी से संबंधित हैं।
एक गतिशील लिंक वास्तव में nested कार्यों (और शायद closures) के लिए ही उपयोगी है, और मानक सी उन्हें जरूरत नहीं है। कुछ लोग प्रदर्शन लिंक के बारे में बोलते हैं। मानक सी में नेस्टेड फ़ंक्शन नहीं हैं, इसलिए किसी भी संबंधित चाल (डिस्प्ले लिंक, ट्रैम्पोलिन, ...) की आवश्यकता नहीं है।
GCC संकलक एक सी भाषा विस्तार रूप nested functions प्रदान करता है, और उन्हें आप के बारे में क्या सोच रहे हैं करने के लिए सक्रियण रिकॉर्ड, बहुत बारीकी से पर गतिशील लिंक के साथ लागू करते हैं। man or boy test पर और trampoline पर विकिपीडिया भी पढ़ें।
- 1. गतिशील भाषा में इंटरफ़ेस?
- 2. स्थिर लिंक लाइब्रेरी को गतिशील डीएल
- 3. सी और सी ++ के संदर्भ में सक्रियण रिकॉर्ड क्या है?
- 4. wp_schedule_event() कक्षा सक्रियण फ़ंक्शन
- 5. ईमेल सक्रियण क्यों उपयोगी है?
- 6. स्थिर/साझा फ़ंक्शन में लोडकंट्रोल
- 7. VS2010: एक भी पुस्तकालय में लिंक स्थिर
- 8. तंत्रिका नेटवर्क: सक्रियण फ़ंक्शन बनाम स्थानांतरण फ़ंक्शन
- 9. WinRT में DefaultOverloadAttribute क्यों आवश्यक है?
- 10. पीएल/एसक्यूएल में स्थिर डीडीएल की अनुमति क्यों नहीं है?
- 11. फोरट्रान 77 स्थिर या स्थिर गतिशील में स्थानीय चर हैं?
- 12. स्थिर इनलाइन चर पर "इनलाइन" क्यों आवश्यक है?
- 13. रेल में स्कॉप्ड और दायरा
- 14. स्थिर फ़ंक्शन पर घातक त्रुटि क्यों दिखा रहा है
- 15. स्विफ्ट एक गतिशील या स्थैतिक भाषा है?
- 16. PHP में आवश्यक संकेत क्यों है?
- 17. sockaddr_in में शून्य पैडिंग क्यों आवश्यक है?
- 18. जावा में स्ट्रिंग [] तर्क क्यों आवश्यक है?
- 19. रेल में attr_accessor क्यों आवश्यक है?
- 20. एक स्थिर टाइप की गई भाषा में महत्वपूर्ण प्रकार की घोषणा क्यों है?
- 21. फोर्स जीसीसी को स्थिर-लिंक उदा। pthreads (और गतिशील लिंक नहीं)
- 22. क्या हाइव में गतिशील पिवट फ़ंक्शन है
- 23. क्या पूर्वाग्रह नोड बहुत बड़े तंत्रिका नेटवर्क में आवश्यक है?
- 24. सी भाषा में 1 बाइट क्यों है
- 25. जाने वाली भाषा में रिकर्सिव फ़ंक्शन
- 26. गतिशील (कोको टच) ढांचे के अंदर लिंक स्थिर लाइब्रेरी
- 27. डी में गतिशील टाइपिंग का उपयोग करना, एक स्थिर टाइप की गई भाषा
- 28. टेंसरफ्लो में रैखिक सक्रियण फ़ंक्शन का उपयोग कैसे करें?
- 29. सीआरटी, एमएफसी, एटीएल, इत्यादि को स्थिर या गतिशील लिंक
- 30. स्थिर लाइब्रेरी और गतिशील एक
कुछ और संदर्भ प्रदान करें। मैंने कभी भी प्रोग्रामिंग भाषा सी – Downvoter
के साथ "सक्रियण रिकॉर्ड" शब्द का उपयोग नहीं किया है, शायद ओपी [THIS] के बारे में बात कर रहा है (http://www.cs.nmsu.edu/~rth/cs/cs471/f00 /ARIs.html) – LPs
क्या यह साझा लाइब्रेरी में स्थिर चर से संबंधित है? – wallyk