c - सी में संकलन और लिंकिंग प्रक्रियाओं को अलग करना क्यों महत्वपूर्ण है?




compiler-construction linker (4)

मैं कुछ समय के लिए सी में प्रोग्रामिंग कर रहा था और मुझे आश्चर्य है कि क्यों इस प्रक्रिया को अलग करना महत्वपूर्ण है (संकलन और लिंक करना)?

क्या कोई कृपया समझा सकता है?


पुनर्निर्माण के समय को कम करने के लिए यह उपयोगी है यदि आप केवल एक स्रोत फाइल बदलते हैं - यह पूरी तरह से पूरी परियोजना को पुनः कंपाइल करने की आवश्यकता नहीं है, लेकिन केवल एक या कुछ फाइलें


मैंने सिस्टम पर काम किया है, जहां उन्हें संकलित करने में दो दिन लगते हैं। आप एक छोटे से बदलाव नहीं करना चाहते तो फिर परीक्षण के लिए 2 दिन इंतजार करना पड़ता है।


व्यवहार में, यह बिल्कुल महत्वपूर्ण नहीं है। विशेष रूप से सरल कार्यक्रमों के लिए, दोनों चरणों को एक प्रोग्राम कॉल जैसे कि के साथ किया जाता है

gcc f1.c f2.c f3.c f4.c -o program

जो इन स्रोत फ़ाइलों से निष्पादन योग्य program बनाता है।

लेकिन तथ्य यह है कि ये अलग प्रक्रियाएं हैं और कुछ मामलों में यह इस पर ध्यान देने योग्य है।


क्योंकि, संकलन प्रत्येक एकल स्रोत कोड फ़ाइल के स्रोत कोड को संबंधित ऑब्जेक्ट कोड में बदलने के लिए जिम्मेदार है। बस। इसलिए संकलक को अपने बाह्य प्रतीकों (पुस्तकालयों और extern वैरिएबल्स) की परवाह नहीं है।

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

यदि आप उपकरण Make , तो आप देखेंगे कि जब भी आप इन्हें आमंत्रित करते make तो यह प्रत्येक फ़ाइल को दोबारा कंपाइल नहीं करता है, यह पता चलता है कि अंतिम बिल्ड के बाद से कौन सी फाइलें संशोधित की गई हैं और फिर उन्हें केवल दोबारा कंपाइल की गई हैं फिर लिंकिंग प्रक्रिया को लागू किया जाता है। जब आप बड़ी परियोजनाओं (जैसे लिनक्स कर्नेल) से निपटते हैं तो यह एक बड़ा समय बचाने है





compiler-optimization