2010-10-11 14 views
5

शीर्षक के अनुसार, सामान्य कार्य की तुलना में, क्या डीएलएल कार्यों को कॉल करने में एक perf हिट है? डीएलएल dlopen द्वारा लोड किया जाएगा। संपादित करें: dlsym समय को अनदेखा करें क्योंकि मैं केवल प्रत्येक फ़ंक्शन के बाद इसे करता हूं।क्या डीएलएल कार्यों का उपयोग कर कोई पेर्फ हिट है?

+1

आप इसे लिनक्स के तहत डीएलएल नहीं कहते हैं। यह एक साझा वस्तु है। साझा ऑब्जेक्ट की लोडिंग कुछ अतिरिक्त समय लेती है हालांकि इसे लोड होने के बाद इसे सामान्य कार्यों से कोई फर्क नहीं पड़ता है। – Vinzenz

उत्तर

5

कॉल का पता और संकलक उन्हें इनलाइन नहीं कर सकते द्वारा अप्रत्यक्ष कर रहे हैं है, इसलिए वहाँ एक मामूली प्रदर्शन हिट है।

आपको केवल चिंता करना चाहिए यदि आप उन्हें प्रदर्शन आंतरिक आंतरिक लूप में और उन्हें प्रोफाइल करने के बाद उपयोग करते हैं।

+0

ठीक है। प्रोफाइल यह है कि मैं करूँगा! : डी – nakiya

0

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

+0

आप सही हैं। लेकिन मेरे मामले में, मैं प्रत्येक समारोह के लिए कार्यक्रम के जीवनकाल के लिए केवल एक बार 'dlsym' करता हूं। और, इसके अतिरिक्त मैं फ़ंक्शन को आमंत्रित करने के लिए फ़ंक्शन पॉइंटर्स का उपयोग करता हूं। तब के बारे में क्या? – nakiya

+0

@nakiya उस मामले में आप केवल उन्हीं ऑप्टिमाइज़ेशन के अवसर खो देते हैं जिन्हें आप अन्यथा चाहते हैं यदि कॉल किया गया फ़ंक्शन स्थिर रूप से लिंक किया गया था, यानी इनलाइनिंग, इंटर-प्रोसेसिंग ऑप्टिमाइज़ेशन, निरंतर प्रचार और इसी तरह। दूसरे शब्दों में यह एक फ़ंक्शन पॉइंटर के माध्यम से एक ही मॉड्यूल के फ़ंक्शन को कॉल करने से वास्तव में अलग नहीं है। – usta

0

पता लगाने के लिए सबसे अच्छा तरीका है बस को मापने के लिए ... DLL कार्यों के लिए

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