दो कुछ हद तक अलग निर्णय कर रहे हैं संकलक समारोह इनलाइन किए जाने वाले विषय में बनाता है:
- एक विशेष समारोह कॉल inlined रहा है या नहीं;
- चाहे फ़ंक्शन का एक गैर-इनलाइन संस्करण मौजूद है।
पहली बार संकलक द्वारा केस-दर-मामले आधार पर तय किया जाता है, यदि उस समय इनलाइनिंग संभव है। यह कार्य संभव नहीं होगा यदि फ़ंक्शन वर्चुअल है, या फ़ंक्शन पॉइंटर के माध्यम से बुलाया जाता है, और यह संकलित समय पर निर्धारित नहीं कर सकता है जिसे फ़ंक्शन कहा जाना है। यह संभव नहीं होगा यदि परिभाषा संकलक के लिए उपलब्ध नहीं है, शायद इसलिए कि इसे एक अलग अनुवाद इकाई में परिभाषित किया गया है और संकलक "संपूर्ण प्रोग्राम अनुकूलन" नहीं करता है। निर्णय inline
, और उसके आकार जैसे अन्य कारकों और इसे कितनी बार कहा जाता है, इस पर प्रभाव हो सकता है या नहीं।
दूसरा इस बात पर निर्भर करता है कि एक गैर-इनलाइन संस्करण की आवश्यकता है या नहीं। यदि इसकी कोई कॉल रेखांकित नहीं है तो इसकी आवश्यकता होगी। यदि किसी भी चीज़ को फ़ंक्शन के पते की आवश्यकता होती है, तो यह भी आपके उद्धरण के अनुसार आवश्यक होगा, क्योंकि उसके पास एक पता होना चाहिए। यह या तो सीधे हो सकता है (उदाहरण के लिए किसी फ़ंक्शन पॉइंटर को पता निर्दिष्ट करके), या अप्रत्यक्ष रूप से (उदाहरण के लिए, वर्चुअल फ़ंक्शंस को ऑब्जेक्ट के गतिशील प्रकार के अनुसार रनटाइम पर देखने के लिए कहीं भी उनके पते की आवश्यकता होगी)।
गैर-इनलाइन संस्करण का अस्तित्व फ़ंक्शन को किसी भी विशेष कॉल को रेखांकित करने से नहीं रोकेगा, हालांकि यह संभव है कि यह संकलक के निर्णय को प्रभावित कर सके, खासकर यदि यह कोड आकार के लिए अनुकूलित करने के लिए कॉन्फ़िगर किया गया हो।
संक्षेप में, आपका उद्धरण सरल है और पूरी तरह सटीक नहीं है; यदि पता लिया जाता है तो संकलक अभी भी "इनलाइनिंग" कर सकता है, यह गैर-इनलाइन संस्करण को छोड़ नहीं सकता है।
स्रोत
2011-07-05 17:08:15
ओह मुझे इस नए मुक्त प्रश्न डाउनवॉट सिस्टम से नफरत है। इस सवाल के साथ क्या गलत था, लोग? –
जिज्ञासा से, कौन सी किताब उस कथन को बना रही है? –
+1 अज्ञात ड्राइव-डाउनवॉटर –