2013-11-26 12 views
14

सी भाषा में एक स्थिर लाइब्रारे और गतिशील लाइब्रेरी के बीच क्या अंतर है?स्थिर लाइब्रेरी और गतिशील एक

+0

इस [http://stackoverflow.com/questions/20229364/what-is-the-difference-between-a-static-library-and-a-dynamic-one][1] प्रयास करें [1]: http://stackoverflow.com/questions/20229364/what-is-the-difference-between-a-static-library-and-a-dynamic-one – Stef

उत्तर

32

यह प्रश्न समझाने के लिए थोड़ा सा व्यापक है, लेकिन मैं आपको एक बुनियादी विचार देने की कोशिश करूंगा जिससे आप आगे पढ़ सकते हैं।

सबसे पहले, आपको यह जानने की ज़रूरत है कि लाइब्रेरी क्या है। असल में, एक पुस्तकालय कार्यों का संग्रह है। आपने देखा होगा कि हम उन फ़ंक्शंस का उपयोग कर रहे हैं जिन्हें हमारे कोड में परिभाषित नहीं किया गया है, या उस विशेष फ़ाइल में। उन तक पहुंच प्राप्त करने के लिए, हम एक हेडर फ़ाइल शामिल करते हैं, जिसमें उन कार्यों की घोषणाएं होती हैं। संकलन के बाद, लिंकिंग नामक एक प्रक्रिया है, जो उन फ़ंक्शन घोषणाओं को उनकी परिभाषाओं से जोड़ती है, जो कि किसी अन्य फ़ाइल में हैं। इसका परिणाम वास्तविक निष्पादन योग्य फ़ाइल है।

अब, जैसा कि मैंने वर्णन किया है लिंकिंग एक स्थिर लिंकिंग है। इसका अर्थ यह है कि प्रत्येक निष्पादन योग्य फ़ाइल में प्रत्येक पुस्तकालय (कार्यों का संग्रह) होता है जिसे इसकी आवश्यकता होती है। यह अंतरिक्ष का अपशिष्ट है, क्योंकि ऐसे कई कार्यक्रम हैं जिन्हें एक ही कार्य की आवश्यकता हो सकती है। इस मामले में, स्मृति में एक ही समारोह की और प्रतियां होंगी। डायनामिक लिंकिंग रन-टाइम पर लिंक करके, संकलन समय पर नहीं, इसे रोकती है। इसका मतलब है कि सभी कार्य एक विशेष मेमोरी स्पेस में हैं और प्रत्येक प्रोग्राम उनकी कई प्रतियों के बिना, उन्हें एक्सेस कर सकता है। इससे आवश्यक स्मृति की मात्रा कम हो जाती है।

जैसा कि मैंने अपने उत्तर की शुरुआत में उल्लेख किया है, यह आपको बुनियादी समझ देने के लिए एक बहुत ही सरल व्याख्या है। मैं दृढ़ता से सुझाव देता हूं कि आप इस विषय पर अधिक अध्ययन करें।

+0

संक्षिप्त और अच्छी तरह से समझाया गया। धन्यवाद! – SRG

2

खिड़कियों में:

स्थिर पुस्तकालय एक उदारीकरण फ़ाइल है कि अपने निष्पादन के अंदर लिंक किया जाएगा और समय के साथ बदल नहीं होगा।

गतिशील लाइब्रेरी आपके निष्पादन योग्य से जुड़ी एक .dll फ़ाइल है और जब आप इसे निष्पादित करते समय लोड की गई डीएलएल फ़ाइल के आधार पर बदल सकते हैं।

+0

सुनिश्चित नहीं हैं कि मैं dll है लिनक्स में – Daniel

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