एकल संकलन इकाई: Difference between revisions
(Created page with "{{Duplication|date=April 2022|dupe=Unity build}} {{Technical|date=March 2022}} एकल संकलन इकाई (एससीयू) सी (प्रोग्रा...") |
No edit summary |
||
| Line 1: | Line 1: | ||
एकल संकलन इकाई (एससीयू) [[सी (प्रोग्रामिंग भाषा)]] और [[सी ++]] भाषाओं के लिए एक [[कंप्यूटर प्रोग्रामिंग]] तकनीक है, जो कई फाइलों में फैले कार्यक्रमों के संकलन समय को कम करती है। विशेष रूप से, यह संकलक को साझा शीर्षलेख फ़ाइलों, परिभाषाओं और टेम्पलेट्स से डेटा रखने की अनुमति देता है, ताकि उसे प्रत्येक फ़ाइल के लिए उन्हें फिर से बनाने की आवश्यकता न हो। यह [[संकलक अनुकूलन]] का एक उदाहरण है। तकनीक को संपूर्ण प्रोग्राम या स्रोत फ़ाइलों के कुछ सबसेट पर लागू किया जा सकता है; जब इसे पूरे प्रोग्राम पर लागू किया जाता है, तो इसे [[एकता निर्माण]] के रूप में भी जाना जाता है।<ref>{{Cite web |last=Developer |first=Unicorn |date=2017-12-25 |title=C और C++ परियोजनाओं के निर्माण में तेजी लाना|url=https://unicorn-dev.medium.com/speeding-up-the-build-of-c-and-c-projects-453ce85dd0e1 |access-date=2022-03-16 |website=Medium |language=en}}</ref> | एकल संकलन इकाई (एससीयू) [[सी (प्रोग्रामिंग भाषा)]] और [[सी ++]] भाषाओं के लिए एक [[कंप्यूटर प्रोग्रामिंग]] तकनीक है, जो कई फाइलों में फैले कार्यक्रमों के संकलन समय को कम करती है। विशेष रूप से, यह संकलक को साझा शीर्षलेख फ़ाइलों, परिभाषाओं और टेम्पलेट्स से डेटा रखने की अनुमति देता है, ताकि उसे प्रत्येक फ़ाइल के लिए उन्हें फिर से बनाने की आवश्यकता न हो। यह [[संकलक अनुकूलन]] का एक उदाहरण है। तकनीक को संपूर्ण प्रोग्राम या स्रोत फ़ाइलों के कुछ सबसेट पर लागू किया जा सकता है; जब इसे पूरे प्रोग्राम पर लागू किया जाता है, तो इसे [[एकता निर्माण]] के रूप में भी जाना जाता है।<ref>{{Cite web |last=Developer |first=Unicorn |date=2017-12-25 |title=C और C++ परियोजनाओं के निर्माण में तेजी लाना|url=https://unicorn-dev.medium.com/speeding-up-the-build-of-c-and-c-projects-453ce85dd0e1 |access-date=2022-03-16 |website=Medium |language=en}}</ref> | ||
== उद्देश्य == | == उद्देश्य == | ||
C/C++ संकलन मॉडल (औपचारिक रूप से अनुवाद वातावरण) में, अलग-अलग {{mono|.c}}/{{mono|.cpp}} स्रोत फ़ाइलों को [[अनुवाद इकाई (प्रोग्रामिंग)]] में प्रीप्रोसेस किया जाता है, जिन्हें बाद में संकलक द्वारा अलग-अलग ऑब्जेक्ट में [[संकलित]] किया जाता है ({{mono|.o}} या {{mono|.obj}}) फ़ाइलें। ये ऑब्जेक्ट फ़ाइलें तब एक निष्पादन योग्य फ़ाइल या लाइब्रेरी बनाने के लिए एक साथ [[लिंकर (कंप्यूटिंग)]] हो सकती हैं। हालाँकि, यह सामान्य हेडर फ़ाइलों पर कई पास किए जा रहे हैं, और C ++ के साथ, विभिन्न अनुवाद इकाइयों में एक ही टेम्प्लेट (प्रोग्रामिंग) के कई टेम्प्लेट इंस्टेंटेशन हैं। | C/C++ संकलन मॉडल (औपचारिक रूप से अनुवाद वातावरण) में, अलग-अलग {{mono|.c}}/{{mono|.cpp}} स्रोत फ़ाइलों को [[अनुवाद इकाई (प्रोग्रामिंग)]] में प्रीप्रोसेस किया जाता है, जिन्हें बाद में संकलक द्वारा अलग-अलग ऑब्जेक्ट में [[संकलित]] किया जाता है ({{mono|.o}} या {{mono|.obj}}) फ़ाइलें। ये ऑब्जेक्ट फ़ाइलें तब एक निष्पादन योग्य फ़ाइल या लाइब्रेरी बनाने के लिए एक साथ [[लिंकर (कंप्यूटिंग)]] हो सकती हैं। हालाँकि, यह सामान्य हेडर फ़ाइलों पर कई पास किए जा रहे हैं, और C ++ के साथ, विभिन्न अनुवाद इकाइयों में एक ही टेम्प्लेट (प्रोग्रामिंग) के कई टेम्प्लेट इंस्टेंटेशन हैं। | ||
| Line 10: | Line 6: | ||
एससीयू का एक और नुकसान यह है कि यह सीरियल है, सभी शामिल स्रोत फ़ाइलों को एक प्रक्रिया में अनुक्रम में संकलित करता है, और इस प्रकार इसे समानांतर नहीं किया जा सकता है, जैसा कि अलग संकलन ([[distcc]] या इसी तरह के कार्यक्रमों के माध्यम से) में किया जा सकता है। इस प्रकार SCU को संकलन को समानांतर करने के लिए स्पष्ट विभाजन (मैन्युअल विभाजन या कई इकाइयों में शार्डिंग) की आवश्यकता होती है। | एससीयू का एक और नुकसान यह है कि यह सीरियल है, सभी शामिल स्रोत फ़ाइलों को एक प्रक्रिया में अनुक्रम में संकलित करता है, और इस प्रकार इसे समानांतर नहीं किया जा सकता है, जैसा कि अलग संकलन ([[distcc]] या इसी तरह के कार्यक्रमों के माध्यम से) में किया जा सकता है। इस प्रकार SCU को संकलन को समानांतर करने के लिए स्पष्ट विभाजन (मैन्युअल विभाजन या कई इकाइयों में शार्डिंग) की आवश्यकता होती है। | ||
SCU एक [[अनुकूलन संकलक]] को [[लिंक-समय अनुकूलन]] की आवश्यकता के बिना [[अंतरप्रक्रियात्मक अनुकूलन]] करने की अनुमति देता है, इसलिए [[इनलाइन समारोह]] जैसे ऑप्टिमाइज़ेशन की अनुमति देता है, और [[ एक्सेप्शन हेंडलिंग ]], [[ साइड इफेक्ट (कंप्यूटर विज्ञान) ]], और रजिस्टर आवंटन के कारण निहित कोड ब्लोट से बचने में मदद करता है। स्वतंत्र संकलन के कारण ये अनुकूलन अक्सर कई संकलकों में संभव नहीं होते हैं, जहां संकलन के दौरान प्रत्येक अनुवाद इकाई में अनुकूलन अलग-अलग होता है, लेकिन डंब लिंकर बिना किसी अनुकूलन के केवल ऑब्जेक्ट फ़ाइलों को लिंक करता है, और इस प्रकार अनुवाद इकाइयों के बीच अंतर-प्रक्रियात्मक अनुकूलन नहीं होता है संभव। | SCU एक [[अनुकूलन संकलक]] को [[लिंक-समय अनुकूलन]] की आवश्यकता के बिना [[अंतरप्रक्रियात्मक अनुकूलन]] करने की अनुमति देता है, इसलिए [[इनलाइन समारोह]] जैसे ऑप्टिमाइज़ेशन की अनुमति देता है, और [[ एक्सेप्शन हेंडलिंग |एक्सेप्शन हेंडलिंग]] , [[ साइड इफेक्ट (कंप्यूटर विज्ञान) |साइड इफेक्ट (कंप्यूटर विज्ञान)]] , और रजिस्टर आवंटन के कारण निहित कोड ब्लोट से बचने में मदद करता है। स्वतंत्र संकलन के कारण ये अनुकूलन अक्सर कई संकलकों में संभव नहीं होते हैं, जहां संकलन के दौरान प्रत्येक अनुवाद इकाई में अनुकूलन अलग-अलग होता है, लेकिन डंब लिंकर बिना किसी अनुकूलन के केवल ऑब्जेक्ट फ़ाइलों को लिंक करता है, और इस प्रकार अनुवाद इकाइयों के बीच अंतर-प्रक्रियात्मक अनुकूलन नहीं होता है संभव। | ||
== उदाहरण == | == उदाहरण == | ||
Revision as of 11:44, 2 June 2023
एकल संकलन इकाई (एससीयू) सी (प्रोग्रामिंग भाषा) और सी ++ भाषाओं के लिए एक कंप्यूटर प्रोग्रामिंग तकनीक है, जो कई फाइलों में फैले कार्यक्रमों के संकलन समय को कम करती है। विशेष रूप से, यह संकलक को साझा शीर्षलेख फ़ाइलों, परिभाषाओं और टेम्पलेट्स से डेटा रखने की अनुमति देता है, ताकि उसे प्रत्येक फ़ाइल के लिए उन्हें फिर से बनाने की आवश्यकता न हो। यह संकलक अनुकूलन का एक उदाहरण है। तकनीक को संपूर्ण प्रोग्राम या स्रोत फ़ाइलों के कुछ सबसेट पर लागू किया जा सकता है; जब इसे पूरे प्रोग्राम पर लागू किया जाता है, तो इसे एकता निर्माण के रूप में भी जाना जाता है।[1]
उद्देश्य
C/C++ संकलन मॉडल (औपचारिक रूप से अनुवाद वातावरण) में, अलग-अलग .c/.cpp स्रोत फ़ाइलों को अनुवाद इकाई (प्रोग्रामिंग) में प्रीप्रोसेस किया जाता है, जिन्हें बाद में संकलक द्वारा अलग-अलग ऑब्जेक्ट में संकलित किया जाता है (.o या .obj) फ़ाइलें। ये ऑब्जेक्ट फ़ाइलें तब एक निष्पादन योग्य फ़ाइल या लाइब्रेरी बनाने के लिए एक साथ लिंकर (कंप्यूटिंग) हो सकती हैं। हालाँकि, यह सामान्य हेडर फ़ाइलों पर कई पास किए जा रहे हैं, और C ++ के साथ, विभिन्न अनुवाद इकाइयों में एक ही टेम्प्लेट (प्रोग्रामिंग) के कई टेम्प्लेट इंस्टेंटेशन हैं।
एकल संकलन इकाई तकनीक लिंक समय के बजाय संकलन समय पर विभिन्न अनुवाद इकाइयों को एक साथ चिपकाने के लिए प्री-प्रोसेसर निर्देशों का उपयोग करती है। यह दोहराव को समाप्त करने के कारण समग्र निर्माण समय को कम करता है, लेकिन संपूर्ण इकाई के पूर्ण पुनर्निर्माण की आवश्यकता के कारण वृद्धिशील निर्माण समय (SCU में शामिल किसी एकल स्रोत फ़ाइल में परिवर्तन करने के बाद आवश्यक समय) को बढ़ाता है। यदि कोई एकल इनपुट फ़ाइल बदलती है।[2] इसलिए, यह तकनीक महत्वपूर्ण ओवरलैप (कई या महंगे सामान्य हेडर या टेम्प्लेट), या स्रोत फ़ाइलों के साथ अक्सर संशोधित स्रोत फ़ाइलों के एक सेट के लिए उपयुक्त है, जिन्हें अक्सर एक साथ पुनर्संकलन की आवश्यकता होती है, जैसे कि एक सामान्य हेडर या टेम्पलेट सहित सभी के कारण जो अक्सर बदलता रहता है .[3] एससीयू का एक और नुकसान यह है कि यह सीरियल है, सभी शामिल स्रोत फ़ाइलों को एक प्रक्रिया में अनुक्रम में संकलित करता है, और इस प्रकार इसे समानांतर नहीं किया जा सकता है, जैसा कि अलग संकलन (distcc या इसी तरह के कार्यक्रमों के माध्यम से) में किया जा सकता है। इस प्रकार SCU को संकलन को समानांतर करने के लिए स्पष्ट विभाजन (मैन्युअल विभाजन या कई इकाइयों में शार्डिंग) की आवश्यकता होती है।
SCU एक अनुकूलन संकलक को लिंक-समय अनुकूलन की आवश्यकता के बिना अंतरप्रक्रियात्मक अनुकूलन करने की अनुमति देता है, इसलिए इनलाइन समारोह जैसे ऑप्टिमाइज़ेशन की अनुमति देता है, और एक्सेप्शन हेंडलिंग , साइड इफेक्ट (कंप्यूटर विज्ञान) , और रजिस्टर आवंटन के कारण निहित कोड ब्लोट से बचने में मदद करता है। स्वतंत्र संकलन के कारण ये अनुकूलन अक्सर कई संकलकों में संभव नहीं होते हैं, जहां संकलन के दौरान प्रत्येक अनुवाद इकाई में अनुकूलन अलग-अलग होता है, लेकिन डंब लिंकर बिना किसी अनुकूलन के केवल ऑब्जेक्ट फ़ाइलों को लिंक करता है, और इस प्रकार अनुवाद इकाइयों के बीच अंतर-प्रक्रियात्मक अनुकूलन नहीं होता है संभव।
उदाहरण
उदाहरण के लिए, यदि आपके पास स्रोत फ़ाइलें हैं foo.cpp और bar.cpp, उन्हें एक एकल संकलन इकाई में निम्नानुसार रखा जा सकता है:
#include "foo.cpp"
#include "bar.cpp"
कल्पना करना foo.cpp और bar.cpp हैं:
//foo.cpp
#include <iostream> // A large, standard header
#include "bar.h" // Declaration of function 'bar'
int main() // Definition of function 'main'
{
bar();
}
//bar.cpp
#include <iostream> // The same large, standard header
void bar() // Definition of function 'bar'
{
...
}
अब मानक शीर्षलेख फ़ाइल (iostream) केवल एक बार संकलित किया जाता है, और कार्य करता है bar फ़ंक्शन में इनलाइन किया जा सकता है main, दूसरे मॉड्यूल से होने के बावजूद।
यह भी देखें
- पूर्व संकलित शीर्षलेख
- C प्रीप्रोसेसर|C/C++ प्रीप्रोसेसर
- संपूर्ण कार्यक्रम अनुकूलन
संदर्भ
- ↑ Developer, Unicorn (2017-12-25). "C और C++ परियोजनाओं के निर्माण में तेजी लाना". Medium (in English). Retrieved 2022-03-16.
- ↑ Krajewski, Marek (2019-01-31). Hands-On High Performance Programming with Qt 5: Build cross-platform applications using concurrency, parallel programming, and memory management (in English). Packt Publishing Ltd. ISBN 978-1-78953-330-9.
- ↑ Schach (1992-05-19). प्रैक्टिकल सॉफ्टवेयर इंजीनियरिंग (in English). CRC Press. p. 183. ISBN 978-0-256-11454-6.