No history yet

मेमोरी और संकलन

मेमोरी और संकलन

जब आप कोड लिखते हैं, तो कंप्यूटर उसे सीधे नहीं समझता है। उसे एक ऐसी भाषा में बदलना पड़ता है जिसे मशीन समझ सके, और यह प्रक्रिया दो मुख्य तरीकों से होती है: संकलन (compilation) और व्याख्या (interpretation)।

संकलन बनाम व्याख्या

एक संकलित भाषा, जैसे C++, में आपका पूरा सोर्स कोड प्रोग्राम चलाने से पहले एक कंपाइलर द्वारा में बदल दिया जाता है। इसका परिणाम एक स्वतंत्र निष्पादन योग्य (executable) फ़ाइल होती है, जैसे .exe फ़ाइल। यह तेज़ चलता है क्योंकि अनुवाद का काम पहले ही हो चुका होता है।

दूसरी ओर, एक व्याख्या की गई भाषा, जैसे Python, में एक इंटरप्रेटर रनटाइम के दौरान आपके कोड को लाइन-दर-लाइन पढ़ता और निष्पादित करता है। कोई अलग निष्पादन योग्य फ़ाइल नहीं बनती है। यह विकास प्रक्रिया को तेज़ और अधिक लचीला बनाता है, क्योंकि आप बदलाव करके तुरंत परिणाम देख सकते हैं।

इसे ऐसे सोचें: संकलन एक पूरी किताब का दूसरी भाषा में अनुवाद करने जैसा है ताकि कोई उसे पढ़ सके। व्याख्या एक लाइव अनुवादक की तरह है जो कोई बोलते समय वाक्य-दर-वाक्य अनुवाद करता है।

जावा का हाइब्रिड दृष्टिकोण

जावा एक दिलचस्प मध्य मार्ग अपनाता है। यह न तो पूरी तरह से संकलित है और न ही पूरी तरह से व्याख्या किया गया है।

  1. सबसे पहले, जावा सोर्स कोड (.java फ़ाइल) को बाइटकोड नामक एक मध्यवर्ती रूप में संकलित किया जाता है।
  2. फिर, इस बाइटकोड को किसी भी मशीन पर (JVM) द्वारा चलाया जाता है।

यह "एक बार लिखो, कहीं भी चलाओ" का सिद्धांत सक्षम करता है। वही बाइटकोड किसी भी ऑपरेटिंग सिस्टम पर चल सकता है जिसमें JVM स्थापित हो, जो जावा को अविश्वसनीय रूप से पोर्टेबल बनाता है।

विशेषतासंकलित (C++)व्याख्या किया गया (Python)हाइब्रिड (Java)
प्रदर्शनतेज़धीमामध्यम
पोर्टेबिलिटीनिम्न (OS-विशिष्ट)उच्चबहुत उच्च (JVM-निर्भर)
विकास की गतिधीमीतेज़मध्यम
निष्पादन चरणसंकलन के बादलाइन-दर-लाइनबाइटकोड -> JVM

मेमोरी: स्टैक और हीप

जब आपका प्रोग्राम चलता है, तो वह डेटा संग्रहीत करने के लिए मेमोरी का उपयोग करता है। यह मेमोरी मुख्य रूप से दो क्षेत्रों में व्यवस्थित होती है: स्टैक और हीप।

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

हीप एक बड़ा, कम संगठित मेमोरी पूल है। यह डायनेमिक मेमोरी आवंटन के लिए उपयोग किया जाता है, जहाँ आपको रनटाइम पर मेमोरी की आवश्यकता होती है और आप पहले से नहीं जानते कि कितनी। C++ में new या C में malloc का उपयोग करके हीप पर मेमोरी आवंटित की जाती है। प्रोग्रामर को इस मेमोरी को स्पष्ट रूप से डी-आवंटित (उदा. delete का उपयोग करके) करने के लिए जिम्मेदार होना चाहिए। यदि आप ऐसा नहीं करते हैं, तो हो सकता है। हीप पर मेमोरी आवंटित करना स्टैक की तुलना में धीमा है, लेकिन यह बहुत अधिक लचीलापन प्रदान करता है।

सही भाषा और मेमोरी प्रबंधन रणनीति का चयन आपके एप्लिकेशन के प्रदर्शन और रखरखाव को बहुत प्रभावित करता है। संकलित भाषाएँ गति के लिए उत्कृष्ट हैं, जबकि व्याख्या की गई भाषाएँ तेजी से प्रोटोटाइपिंग के लिए बढ़िया हैं। स्टैक और हीप के बीच के अंतर को समझना कुशल और बग-मुक्त कोड लिखने के लिए महत्वपूर्ण है।

Quiz Questions 1/5

संकलित (compiled) भाषा, जैसे C++, की मुख्य विशेषता क्या है?

Quiz Questions 2/5

जावा का "एक बार लिखो, कहीं भी चलाओ" का सिद्धांत किस तकनीक के कारण संभव है?