2011-09-03 17 views
6

डीएलएल से फ़ंक्शंस कॉल करते समय प्रदर्शन पेनल्टी कितनी बड़ी है? लोड हो रहा है डीएलएल हमारे लिए कोई मुद्दा नहीं है, हमारी हाइपरफ़ लाइब्रेरी में कॉल की संख्या बड़ी नहीं होगी।डीएलएल फ़ंक्शन कॉल का ओवरहेड

लगभग, कितने निर्देश/घड़ी-चक्र एक कॉल एक स्थिर पुस्तकालय कॉल पर लगेगा?

+0

[DLL के ओवरहेड] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/4030043/overhead-of-dll) –

उत्तर

11

मेरा जवाब कैसे लिनक्स/glibc/ELF गतिशील लिंकर काम करता है पर आधारित है, लेकिन मैं यह मान लेगा समग्र जवाब अन्य प्लेटफार्मों के लिए एक ही है:

वहाँ एक गतिशील लोड करने के लिए पहली कॉल बीच एक अंतर है प्रतीक और अगली कॉल। पहला कॉल महंगा है, इसमें कई चक्र शामिल हो सकते हैं। अन्य सभी कॉल कम से कम 1 - 2 निर्देश दूर हैं।

जिस तरह से यह काम करता है वह यह है कि लिंकर प्रक्रिया लिंकेज तालिका में एक प्रविष्टि स्थापित करता है जो उस बाहरी फ़ंक्शन के लिए वैश्विक ऑफसेट तालिका से पता लगाता है। पहले जीओटी पॉइंट्स के पते को एक स्टब पर कॉल करें जो डीएलएल में फ़ंक्शन के वास्तविक पते को हल करने के लिए गतिशील लिंकर चलाता है। यह बहुत सारे चक्र ले सकता है, लेकिन एक बार यह एक बार किया जाता है, गतिशील लिंकर सीधे जीओटी प्रविष्टि को फंक्शन पर इंगित करने के लिए पथित करेगा, इसलिए अगली बार पीएलटी कोड कहा जाता है, यह सीधे फ़ंक्शन पर कॉल करेगा। http://www.technovelty.org/linux/pltgot.html

+1

:

यहाँ इस प्रक्रिया के माध्यम से एक काफी अच्छा टहलने के लिए एक लिंक है विंडोज़ पर एक डीएलएल में यह सब काम लोडर द्वारा मॉड्यूल लोड समय पर किया जाता है। –

+0

मेरा मानना ​​है कि यह केवल तभी सच है जब DLL को LoadLibrary के साथ गतिशील रूप से लोड नहीं किया गया है। –

+0

@ टामास: क्यों? क्योंकि हमें रनटाइम लोडिंग की आवश्यकता है। – Cartesius00

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