1) इस तथ्य पर आधारित है कि DLL फ़ंक्शन को कॉल करना हमेशा एक अतिरिक्त अप्रत्यक्ष कूद का उपयोग करता है। आज, यह आमतौर पर नगण्य है। DL3 के अंदर i386 सीपीयू पर कुछ और ओवरहेड है, क्योंकि वे स्थिति स्वतंत्र कोड उत्पन्न नहीं कर सकते हैं। Amd64 पर, कूदता प्रोग्राम काउंटर के सापेक्ष हो सकता है, इसलिए यह एक बहुत बड़ा सुधार है।
2) यह सही है। प्रोफाइलिंग द्वारा निर्देशित अनुकूलन के साथ आप आमतौर पर लगभग 10-15 प्रतिशत प्रदर्शन जीत सकते हैं। अब जब सीपीयू की गति अपनी सीमा तक पहुँच गई है तो यह करने लायक हो सकता है।
मैं जोड़ूंगा: (3) लिंकर अधिक कैशे कुशल समूहन में कार्यों को व्यवस्थित कर सकता है, ताकि महंगे कैशे स्तर को कम से कम किया जा सके। यह विशेष रूप से अनुप्रयोगों के स्टार्टअप समय (सूर्य C ++ संकलक के साथ देखे गए परिणामों के आधार पर) को भी प्रभावित कर सकता है
और यह मत भूलो कि DLL के साथ कोई मृत कोड उन्मूलन नहीं किया जा सकता है। भाषा के आधार पर, DLL कोड इष्टतम भी नहीं हो सकता है। वर्चुअल फ़ंक्शंस हमेशा वर्चुअल होते हैं क्योंकि कंपाइलर को यह नहीं पता होता है कि कोई क्लाइंट इसे ओवरराइट कर रहा है या नहीं।
इन कारणों से, यदि DLL की कोई वास्तविक आवश्यकता नहीं है, तो बस स्थैतिक संकलन का उपयोग करें।
EDIT (टिप्पणी का जवाब देने के लिए, उपयोगकर्ता अंडरस्कोर द्वारा)
यहाँ स्थिति के बारे में एक अच्छा संसाधन है स्वतंत्र कोड समस्या http://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-sared-lbooks/
जैसा कि समझाया गया है x86 में उन्हें AFAIK के अलावा किसी और चीज के लिए 15 बिट जंप रेंज नहीं है और बिना शर्त जंप और कॉल के लिए नहीं है। यही कारण है कि कार्य (जनरेटर से) तो 32K हमेशा एक समस्या रही है और एम्बेडेड trampolines की जरूरत है।
लेकिन लिनक्स जैसे लोकप्रिय x86 OS पर आपको .so / DLL फ़ाइल gcc
स्विच -fpic
(जो अप्रत्यक्ष जंप टेबल के उपयोग को लागू करता है) के साथ उत्पन्न नहीं होती है, तो आपको परवाह करने की आवश्यकता नहीं है । क्योंकि यदि आप नहीं करते हैं, तो कोड को सामान्य लिंकर की तरह ही तय किया जाएगा। लेकिन ऐसा करते समय यह कोड सेगमेंट को गैर-साझा करने योग्य बनाता है और इसे डिस्क से मेमोरी में कोड की पूरी मैपिंग की आवश्यकता होती है और इसे उपयोग करने से पहले इसे सभी को छूना चाहिए (अधिकांश कैश को खाली करना, टीएलबी को मारना आदि) एक समय था। जब यह धीमा माना जाता था।
तो आपको अब कोई फायदा नहीं होगा।
मुझे याद है कि क्या ओएस (सोलारिस या FreeBSD) क्योंकि मैं सिर्फ यह नहीं कर रहा था मुझे समस्याओं मेरी यूनिक्स निर्माण प्रणाली के साथ दिया और सोचा कि क्यों यह दुर्घटनाग्रस्त हो गया जब तक मैं लागू किया -fPIC
करने के लिए gcc
।