2010-03-05 19 views
5

मुझे पता है कि कंपाइलर प्रोग्रामर द्वारा अनुरोध किए गए फ़ंक्शन के इनलाइन विस्तार को निष्पादित या नहीं कर सकता है या नहीं।
मैं जानना उत्सुक था, क्या कोई तरीका है जिसके द्वारा प्रोग्रामर यह सुनिश्चित कर सकता है कि कंपाइलर ने एक विशेष कार्य को रेखांकित किया है?इनलाइन फ़ंक्शंस

+2

अधिक उपयुक्त सवाल, क्या कोई तरीका है जिसके द्वारा प्रोग्रामर यह सुनिश्चित कर सकता है कि कंपाइलर ने एक विशेष फ़ंक्शन * कॉल * को रेखांकित किया है? – Potatoswatter

उत्तर

10

जेनरेट कोड को देखकर, नहीं। कुछ कार्यान्वयन उस जानकारी को प्रदान कर सकते हैं लेकिन मानक द्वारा इसकी आवश्यकता नहीं है।

हालात inline या register (कंपकंपी) की तरह संकलक करने के लिए सुझाव रहे हैं और यह उन्हें स्वीकार उन्हें अनदेखा या जब चुपके से अपनी पीठ के पीछे जा रहा भी आप से झूठ है कि यह यह किया है और यह नहीं कर रही करने के लिए स्वतंत्र है :-)

मुझे इस तरह की विशेषताओं का उपयोग नहीं करना पड़ता है क्योंकि मुझे संदेह है कि संकलक अक्सर मेरे कोड से अधिकतर प्रदर्शन को छूने के तरीके से बेहतर जानता है।

0

ऑब्जेक्ट फ़ाइल के डिस्सेप्लर पढ़ें।

1

असेंबलर कोड उत्पन्न करने और वहां जांचने के लिए अपने कंपाइलर को सेट करें।

+0

और यदि आपके पास डीबग वी रिलीज बिल्ड के लिए अलग-अलग झंडे हैं, तो बाद वाले का उपयोग करना सुनिश्चित करें। मैंने कुछ कंपाइलर्स को देखा है जो कम से कम कुछ ऑप्टिमाइज़ेशन सक्षम होने तक इनलाइन नहीं करते हैं। –

2

आप अपने कोड को प्रोफाइल कर सकते हैं और देख सकते हैं कि कॉल स्टैक में ब्याज का कार्य दिखाया गया है या नहीं। हालांकि, मुझे लगता है कि यदि आपकी स्टैक नमूना दर पर्याप्त नहीं है तो कोई गारंटी नहीं है।

लेकिन यह साबित हो सकता है कि यह inlined है: अगर आप A कॉल B, जो C कॉल जानते हैं, और A कभी नहीं C सीधे कहता है, यदि आप A कॉल स्टैक पर C बुला देखते हैं, क्या आप जानते हैं B कि कॉल के लिए inlined था ।

0

आउटपुट असेंबलर को देखने के अलावा जानने का कोई तरीका नहीं है।

इन दिनों कंपाइलर्स 'स्मार्ट' हैं और वे तय करते हैं कि कौन से फ़ंक्शन इनलाइन और किस मामले में हैं।

रजिस्टर कीवर्ड की तरह ही, कंपाइलर इन दिनों उठाते हैं और वास्तव में आपके अनुरोधों को अनदेखा करते हैं।

0

मुझे नहीं लगता कि पता लगाने के लिए आप क्या चाहते हैं के लिए एक रास्ता है,

लेकिन आप से एक इनलाइन समारोह किया जा रहा है समारोह की possibilites बढ़ा सकते हैं,

समारोह की परिभाषा दिखाई बनाना अनुवाद इकाई में जिसे इसे कहा जाता है। यानी आपको हमेशा हेडर फ़ाइल में इनलाइन फ़ंक्शन की परिभाषा डालना पड़ता है।

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