Object file
एक ऑब्जेक्ट फ़ाइल एक कंप्यूटर फ़ाइल है जिसमें ऑब्जेक्ट कोड होता है, जो एक असेंबलर या कंपाइलर का मशीन कोड आउटपुट होता है। ऑब्जेक्ट कोड आमतौर पर स्थानांतरित करने योग्य होता है, और आमतौर पर सीधे निष्पादन योग्य नहीं होता है। ऑब्जेक्ट फ़ाइलों के लिए विभिन्न प्रारूप हैं, और एक ही मशीन कोड को विभिन्न ऑब्जेक्ट फ़ाइल प्रारूपों में पैक किया जा सकता है। एक ऑब्जेक्ट फ़ाइल एक साझा पुस्तकालय की तरह भी काम कर सकती है। ऑब्जेक्ट कोड के अलावा, ऑब्जेक्ट फ़ाइलों में मेटाडेटा हो सकता है जिसका उपयोग लिंक करने या डीबग करने के लिए किया जाता है, जिसमें शामिल हैंः विभिन्न मॉड्यूल के बीच प्रतीकात्मक क्रॉस-संदर्भों को हल करने के लिए जानकारी, स्थानांतरण जानकारी, स्टैक अनवाइंडिंग जानकारी, टिप्पणियाँ, प्रोग्राम प्रतीक, डीबगिंग या प्रोफाइलिंग जानकारी। अन्य मेटाडेटा में संकलन की तारीख और समय, संकलक का नाम और संस्करण और अन्य पहचान करने वाली जानकारी शामिल हो सकती है। "ऑब्जेक्ट प्रोग्राम" शब्द कम से कम 1950 के दशक का हैः एक कंप्यूटर प्रोग्रामर एक कंपाइलर या असेंबलर के साथ ऑब्जेक्ट कोड उत्पन्न करता है। उदाहरण के लिए, लिनक्स के तहत, जी. एन. यू. संकलक संग्रह संकलक. ओ. विस्तार के साथ फाइलें उत्पन्न करेगा जो ई. एल. एफ. प्रारूप का उपयोग करते हैं। विंडोज पर संकलन. ओ. बी. जे. विस्तार के साथ फाइलें उत्पन्न करता है जो सी. ओ. एफ. एफ. प्रारूप का उपयोग करते हैं। इसके बाद एक लिंकर का उपयोग ऑब्जेक्ट कोड को एक निष्पादन योग्य प्रोग्राम में संयोजित करने के लिए किया जाता है या आवश्यकतानुसार पूर्व-संकलित सिस्टम पुस्तकालयों में लाइब्रेरी को खींचा जाता है। ऑब्जेक्ट फ़ाइल प्रारूप कई अलग-अलग ऑब्जेक्ट फ़ाइल प्रारूप हैं; मूल रूप से प्रत्येक प्रकार के कंप्यूटर का अपना अनूठा प्रारूप था, लेकिन यूनिक्स और अन्य पोर्टेबल ऑपरेटिंग सिस्टम के आगमन के साथ, कुछ प्रारूप, जैसे कि ईएलएफ और सीओएफएफ, को विभिन्न प्रकार की प्रणालियों पर परिभाषित और उपयोग किया गया है। एक ही प्रारूप का उपयोग लिंकर इनपुट और आउटपुट दोनों के रूप में किया जा सकता है, और इस प्रकार लाइब्रेरी और निष्पादन योग्य फ़ाइल प्रारूप के रूप में। कुछ प्रारूपों में विभिन्न प्रोसेसरों के लिए मशीन कोड हो सकता है, जिसमें प्रोग्राम लोड होने पर ऑपरेटिंग सिस्टम द्वारा चुना गया सही कोड हो सकता है। कुछ प्रणालियाँ ऐसे प्रारूपों के बीच अंतर करती हैं जो सीधे निष्पादित किए जा सकते हैं और ऐसे प्रारूप जिन्हें लिंकर द्वारा संसाधित करने की आवश्यकता होती है। उदाहरण के लिए, ओएस/360 और उत्तराधिकारी पहले प्रारूप को लोड मॉड्यूल और दूसरे को ऑब्जेक्ट मॉड्यूल कहते हैं। इस मामले में फाइलों के पूरी तरह से अलग प्रारूप होते हैं। ऑब्जेक्ट फ़ाइल प्रारूप का डिज़ाइन और/या चयन समग्र सिस्टम डिज़ाइन का एक प्रमुख हिस्सा है। यह लिंकर के प्रदर्शन को प्रभावित करता है और इस प्रकार एक प्रोग्राम विकसित किए जाने के दौरान प्रोग्रामर टर्नअराउंड होता है। यदि प्रारूप का उपयोग निष्पादन योग्य के लिए किया जाता है, तो डिज़ाइन प्रोग्रामों को चलने में लगने वाले समय को भी प्रभावित करता है, और इस प्रकार उपयोगकर्ताओं के लिए प्रतिक्रियाशीलता। कई शुरुआती कंप्यूटर, या छोटे माइक्रोकंप्यूटर, केवल एक निरपेक्ष वस्तु प्रारूप का समर्थन करते हैं। कार्यक्रम स्थानांतरित करने योग्य नहीं हैं; उन्हें विशिष्ट, पूर्वनिर्धारित पतों पर निष्पादित करने के लिए इकट्ठा या संकलित करने की आवश्यकता होती है। फ़ाइल में कोई स्थानांतरण या लिंकेज जानकारी नहीं है। इन फ़ाइलों को पढ़ने/लिखने की स्मृति में लोड किया जा सकता है, या केवल पढ़ने की स्मृति में संग्रहीत किया जा सकता है। उदाहरण के लिए, मोटोरोला 6800 एम. आई. के. बी. यू. जी. मॉनिटर में पेपर टेप से एक निरपेक्ष ऑब्जेक्ट फ़ाइल (एस. आर. ई. सी. प्रारूप) को पढ़ने के लिए एक दिनचर्या होती है। डी. ओ. एस. सी. ओ. एम. संचिकाएँ निरपेक्ष वस्तु संचिकाओं का एक और हालिया उदाहरण हैं। विभाजन अधिकांश ऑब्जेक्ट फ़ाइल प्रारूपों को डेटा के अलग-अलग वर्गों के रूप में संरचित किया जाता है, प्रत्येक खंड में एक निश्चित प्रकार का डेटा होता है। इन खंडों को "स्मृति खंड" शब्द के कारण "खंड" के रूप में जाना जाता है, जो पहले स्मृति प्रबंधन का एक सामान्य रूप था। जब एक प्रोग्राम को लोडर द्वारा मेमोरी में लोड किया जाता है, तो लोडर प्रोग्राम को मेमोरी के विभिन्न क्षेत्रों को आवंटित करता है। इनमें से कुछ क्षेत्र ऑब्जेक्ट फ़ाइल के अनुभागों से मेल खाते हैं, और इस प्रकार आमतौर पर एक ही नाम से जाने जाते हैं। अन्य, जैसे कि स्टैक, केवल रन टाइम पर मौजूद होते हैं। कुछ मामलों में, वास्तविक स्मृति पते निर्दिष्ट करने के लिए लोडर (या लिंकर) द्वारा स्थानांतरण किया जाता है। हालाँकि, कई कार्यक्रमों या वास्तुकलाओं के लिए, स्मृति प्रबंधन इकाई या स्थिति-स्वतंत्र कोड द्वारा नियंत्रित होने के कारण स्थानांतरण आवश्यक नहीं है। कुछ प्रणालियों पर ऑब्जेक्ट फ़ाइल के खंडों को मेमोरी में कॉपी (पेज) किया जा सकता है और आगे की प्रक्रिया की आवश्यकता के बिना निष्पादित किया जा सकता है। इन प्रणालियों पर, यह आलस्य से किया जा सकता है, यानी केवल तभी जब खंडों को निष्पादन के दौरान संदर्भित किया जाता है, उदाहरण के लिए ऑब्जेक्ट फ़ाइल द्वारा समर्थित मेमोरी-मैप की गई फ़ाइल के माध्यम से। विशिष्ट ऑब्जेक्ट फ़ाइल प्रारूपों द्वारा समर्थित डेटा के प्रकारः हेडर (वर्णनात्मक और नियंत्रण जानकारी) कोड सेगमेंट ("टेक्स्ट सेगमेंट", निष्पादन योग्य कोड) डेटा सेगमेंट (प्रारंभिक स्थैतिक चर) केवल-पढ़ने के लिए डेटा सेगमेंट (रोडाटा, प्रारंभिक स्थैतिक स्थिरांक) बीएसएस सेगमेंट (प्रारंभिक स्थैतिक डेटा, दोनों चर और स्थिरांक) स्थानांतरण जानकारी को जोड़ने के लिए बाहरी परिभाषाएँ और संदर्भ गतिशील जानकारी को जोड़ने के लिए विभिन्न ऑब्जेक्ट फ़ाइलों में डिबगिंग जानकारी खंडों को लिंकर द्वारा निर्दिष्ट नियमों के अनुसार जोड़ा जा सकता है जब खंडों को परिभाषित किया जाता है। ऑब्जेक्ट फ़ाइलों के बीच साझा किए गए खंडों के लिए परंपराएं मौजूद हैं; उदाहरण के लिए, डी. ओ. एस. में अलग-अलग मेमोरी मॉडल हैं जो विशेष खंडों के नाम निर्दिष्ट करते हैं और उन्हें जोड़ा जा सकता है या नहीं। डिबगिंग जानकारी का डिबगिंग डेटा प्रारूप या तो ऑब्जेक्ट फ़ाइल प्रारूप का एक अभिन्न हिस्सा हो सकता है, जैसा कि सी. ओ. एफ. एफ. में है, या एक अर्ध-स्वतंत्र प्रारूप हो सकता है जिसका उपयोग कई ऑब्जेक्ट प्रारूपों के साथ किया जा सकता है, जैसे कि स्टेब्स या डी. डब्ल्यू. ए. आर. एफ। जी. एन. यू. परियोजना की बाइनरी फ़ाइल डिस्क्रिप्टर लाइब्रेरी (बी. एफ. डी. लाइब्रेरी) विभिन्न प्रारूपों में ऑब्जेक्ट फ़ाइलों के हेरफेर के लिए एक सामान्य ए. पी. आई. प्रदान करती है। इंटेल हेक्साडेसिमल ऑब्जेक्ट फ़ाइल प्रारूप (आम तौर पर फ़ाइल विस्तार. एच. ई. एक्स. के साथ, लेकिन कभी-कभी. ओ. बी. जे. के साथ भी) रिलोकेटेबल ऑब्जेक्ट मॉड्यूल प्रारूप वेवफ्रंट. ओ. बी. जे. संदर्भ फ़ाइल को भी देखें।