ठीक है, को देखने के एक अधिक सामान्य दृष्टिकोण से इस पर ध्यान दें:
के साथ शुरू करने के लिए, आप एक संगत सीपीयू कि संकलक उत्पादन का लक्ष्य मशीन के साथ काम करता है के साथ एक कंप्यूटर की आवश्यकता होगी । आपको लगता है कि यह स्पष्ट है लेकिन यह मानते हुए कि कोड x86 मशीन कोड में संकलित है, यह अल्फा सीपीयू पर नहीं चलेगा जो विभिन्न निर्देशों का उपयोग करता है। वैकल्पिक रूप से, यदि आप x64 मशीन कोड को संकलित करते हैं, तो यह x86- केवल CPU पर नहीं चलेंगे। तो सी ++ प्रोग्राम चलाने के लिए सही हार्डवेयर आवश्यक है, जावा जैसी वर्चुअल-मशीन आधारित भाषाओं के विपरीत, जो कि उस सार को दूर करता है।
आपको सही ऑपरेटिंग सिस्टम की भी आवश्यकता होगी। मैं प्रोग्रामिंग पोर्टिंग पर एक विशेषज्ञ नहीं हूं लेकिन मुझे नहीं लगता कि एक एकल निष्पादन योग्य बनाना संभव है जो सी ++ में कई ऑपरेटिंग सिस्टम पर चलता है। उदाहरण के लिए, विंडोज़ में आपके दूसरे उदाहरण को संकलित करने के लिए आपके main()
फ़ंक्शन पर वास्तविक कॉल से पहले और बाद में दृश्यों के पीछे बहुत सारे रनटाइम-लाइब्रेरी कोड होंगे। यह चीजों को ढेर तैयार करने और सीआरटी पुस्तकालय शुरू करने जैसी चीजें करेगा। विंडोज़ के लिए सीआरटी विंडोज एपीआई के माध्यम से लागू किया गया है। आप लाइब्रेरी को स्थिर लिंक कर सकते हैं, इसलिए कोई सीआरटी डीएलएल आवश्यक नहीं है, लेकिन आपके प्रोग्राम में कोड अभी भी विंडोज एपीआई को कॉल करता है, इसलिए अभी भी मंच निर्भर है। एक प्रयोग के रूप मैं दृश्य स्टूडियो के साथ Windows पर स्थिर जोड़ने के साथ एक खाली कार्यक्रम संकलित, और निर्भरता वाकर के अनुसार यह अभी भी HeapCreate
और ExitProcess
जैसे कार्यों के लिए Kernel32.dll संदर्भ देता है। तो 'खाली' कार्यक्रम अभी भी कुछ उपयोगी करने की तैयारी में, आपके लिए कुछ भी उपयोगी काम करता है या नहीं, इस पर निर्भर करता है कि आपके लिए ऑपरेटिंग सिस्टम सामान का पूरा समूह है।
यह भी ध्यान रखें वहाँ अच्छी तरह से कम से कम ऑपरेटिंग सिस्टम संस्करण हो सकता है: दृश्य स्टूडियो 2010 EncodePointer
और DecodePointer
की जाने वाली कॉल की वजह से, Windows XP SP2 की आवश्यकता है या इसके बाद भी एक खाली कार्यक्रम के लिए। this question देखें।
प्रणाली स्मृति अपने कार्यक्रम शुरू करने के लिए उपलब्ध होगा। आपको लगता है कि यह कुछ भी नहीं करता है, लेकिन जैसा कि ऊपर दिखाया गया है, main()
से पहले ओएस प्रारंभिक कॉल का पूरा भार आपके प्रोग्राम की लाइब्रेरी द्वारा किया जाता है। इन्हें शायद कुछ स्मृति की आवश्यकता होती है, और इसे निष्पादित करने के लिए आवश्यक प्रोसेसिंग समय की आवश्यकता होती है।
ऑपरेटिंग सिस्टम की कॉन्फ़िगरेशन के आधार पर, आपको निष्पादन योग्य प्रोग्राम लॉन्च करने के लिए पर्याप्त सुरक्षा विशेषाधिकार की आवश्यकता हो सकती है।
तो, संक्षेप में, यहां तक कि स्थिर जोड़ने के साथ एक खाली सी ++ कार्यक्रम चलाने के लिए, आप इस कार्यक्रम को पूरा करने के लिए सही सीपीयू, ऑपरेटिंग सिस्टम, निष्पादन योग्य चलाने की अनुमति, और स्मृति/प्रसंस्करण समय की जरूरत है। जावा या .NET जैसी वीएम प्रौद्योगिकियों की तुलना में, आवश्यकताएं शायद प्रोग्राम को चलाने के लिए सही वर्चुअल मशीन, आवश्यक विशेषाधिकार, और आवश्यक स्मृति/CPU समय को कम कर देगी। यह उतना आसान नहीं हो सकता जितना लगता है: आपको वर्चुअल मशीन के सही संस्करण की आवश्यकता हो सकती है, जैसे .NET Framework 4.0। यह आपकी वितरण प्रक्रिया को जटिल कर सकता है क्योंकि मशीन के लिए संपूर्ण जेवीएम या .NET ढांचे को अद्यतन करने के लिए समय लेने वाली प्रक्रिया हो सकती है जो प्रशासक विशेषाधिकारों और शायद एक इंटरनेट कनेक्शन की आवश्यकता होती है। कुछ संकीर्ण मामलों में, यह एक सौदा ब्रेकर हो सकता है, क्योंकि दुर्लभ अवसरों पर यह कहने में सक्षम होना आसान हो सकता है कि यह "एक्सपी के बाद से किसी भी x86- संगत विंडोज ऑपरेटिंग सिस्टम पर चलाएगा" के विपरीत "नवीनतम वर्चुअल वाले किसी भी मशीन के विपरीत मशीन जो कल ही जारी की गई थी "। अधिकांश उद्देश्यों के लिए, हालांकि, तथ्य यह है कि वर्चुअल मशीन आपको (सिद्धांत में) सीपीयू के बारे में भूलने और ऑपरेटिंग सिस्टम प्रोग्राम के वितरण को आसान बनाता है; सी ++ के साथ, आप प्लेटफार्मों और सीपीयू के प्रत्येक संयोजन के लिए अलग-अलग निष्पादन योग्यों को कम से कम संकलित करने की आवश्यकता है, भले ही आप जिन पुस्तकालयों का उपयोग कर रहे हैं, उनकी अतिरिक्त आवश्यकताओं के बावजूद।
दुनिया की सभी किस्मत! – Chubsdad
@Chubsdad true: D –
आपका दूसरा उदाहरण किसी भी प्रसंस्करण की आवश्यकता नहीं है, इसके अलावा 'मुख्य()' से 'वापसी 0; 'के कारण होता है। यह किसी भी प्रकार के कार्यों को नहीं बुलाता है, और 'अस्थिर' चर का उपयोग नहीं करता है, इसलिए इसका कोई अवलोकन योग्य व्यवहार नहीं है। –