2009-05-13 31 views
43

उदाहरण के लिए, जब GlowCode प्रोफाइलर वेबसाइट पर देख रहे हैं यह कहना है:देशी और प्रबंधित कोड के बीच अंतर?

"GlowCode 6.2 और x64 प्रोफ़ाइल देशी, कामयाब रहे, और मिश्रित सी ++, सी #, .NET कोड"

वे क्या मतलब है?

+0

यह भी देखें http://stackoverflow.com/questions/3434202/what-is-the-difference-between-native-code-machine-code-and-assembly-code –

उत्तर

64

मूल कोड वह कोड है जिसकी स्मृति "प्रबंधित" नहीं है, जैसा कि स्मृति आपके लिए मुक्त नहीं है (उदाहरण के लिए सी ++ 'डिलीट और सी का मुफ़्त), कोई संदर्भ गिनती नहीं, कोई कचरा संग्रह नहीं है। प्रबंधित कोड, आपने अनुमान लगाया है, वह कोड है जिसकी स्मृति निःशुल्क है और आपके लिए आवंटित है, कचरा संग्रह और अन्य उपहार।

मिश्रित कोड तब होता है जब आपने एक प्रबंधित प्रबंधन किया है जो एक अप्रबंधित परत पर कॉल करता है। आम तौर पर, जब आपके पास शुद्ध अप्रबंधित सी ++ डीएलएल होता है और आप उसे पी/इनवॉक का उपयोग करके .NET से कॉल करते हैं।

+2

सी ++/सीएलआई कंपाइलर प्रबंधित कोड की अनुमति देता है (देशी ढेर (कोई कचरा संग्रह) पर देशी वस्तुओं को आवंटित करने के लिए '/ clr' और आउटपुट के साथ एमएसआईएल के रूप में संकलित)। इसके अलावा, (डेस्कटॉप) .NET कचरा कलेक्टर संदर्भ गणना का उपयोग नहीं करता है (जिसमें चक्रों में समस्याएं हैं)। –

+0

मुझे यह जवाब Bing द्वारा मिला। एमएस वेबसाइट की तुलना में काफी बेहतर समझाया गया। – toddwz

+2

मूल * मतलब स्मृति प्रबंधन नहीं है। मूल मतलब है कि यह एक विंडोज़ एप्लिकेशन या डीएल है। नेट या तो नहीं बना है। यह मूल अनुप्रयोग के रूप में एक ही फ़ाइल एक्सटेंशन का उपयोग करता है लेकिन उन exe's और dll की सामग्री Windows exe और dll की नहीं है। यही कारण है कि आप मूल विंडोज अनुप्रयोग के साथ .net "dll" का उपयोग नहीं कर सकते हैं, क्योंकि यह विंडोज़ डीएल नहीं है। –

39

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

यदि आप एक अप्रबंधित ऐप चला रहे हैं, तो कोड नामित ओएस/हार्डवेयर के लिए चलाने के लिए संकलित किया गया है। किसी अन्य ओएस/निर्देश सेट के लिए कोई पोर्टेबिलिटी खो जाती है और इसे निष्पादित करने के लिए पुन: संकलित किया जाना चाहिए।

+0

कृपया बताएं कि "माइक्रोसॉफ्ट के स्वाभाविक रूप से बंद आर्किटेक्चर की वजह से", "पोर्टेबिलिटी वर्तमान में जावा के रूप में साफ नहीं है"। मुझे नहीं लगता कि माइक्रोसॉफ्ट का स्वाभाविक रूप से बंद आर्किटेक्चर जावा के रूप में पोर्टेबल के रूप में .NET की क्षमता को सीमित क्यों करेगा। – Pacerier

+3

@pacerier आज आपके प्रश्न का मेरा जवाब छह साल पहले दिए गए एक से अलग होगा। छह साल पहले .NET खुला स्रोत नहीं था, उदाहरण के लिए। लेकिन हाल ही में दी गई घोषणा ने उस संबंध में सबकुछ बदल दिया है, है ना? :) –

+0

यह भी इंगित करना महत्वपूर्ण है कि गैर-मूल मूल के साथ एकीकृत नहीं हो सकता है। उदाहरण के लिए आप .NET के साथ एक आईएसपीआई एप्लीकेशन नहीं बना सकते हैं क्योंकि यह विंडोज़ डीएलएल नहीं बनाता है, या आप .NET का उपयोग कर मूल अनुप्रयोगों के लिए प्लगइन्स नहीं बना सकते हैं क्योंकि चीजें .net बनाता है ओएस फाइल नहीं। –

25

मूल कोड कंप्यूटर की "मूल" मशीन भाषा में लिखा गया है जो यह चल रहा है और प्रोसेसर द्वारा सीधे निष्पादित किया जाता है।

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

सी और सी ++ प्रोग्राम मूल हैं।

जावा और सी # (और उस मामले के लिए सभी .NET भाषाएं) प्रबंधित की जाती हैं।

प्रबंधित सी ++ सी ++ का एक विशेष रूप है जो .NET दुभाषिया में चलता है।

एक मिश्रित कार्यक्रम एक ऐसा प्रोग्राम है जो देशी और प्रबंधित दोनों कोड का उपयोग करता है।

+3

मैं बस यह इंगित करना चाहता था कि रूबी, पायथन, लिस्प, इत्यादि जैसी एक व्याख्या की गई भाषा की अवधारणा और एक प्रबंधित वीएम भाषा है जो जावा और सी # जैसे जेआईटी संकलन का उपयोग करती है। उत्तरार्द्ध को अक्सर एक दुभाषिया का उपयोग करने की आवश्यकता नहीं होती है और अंत में मूल मशीन कोड पर संकलित किया जाता है। यहां और अधिक: http://en.wikipedia.org/wiki/Interpreted_language –

+0

@dodgy_coder, क्या आप वाकई जावा को मूल मशीन कोड में संकलित करते हैं? नहीं, यह बाइटकोड को संकलित करता है जो ** मूल नहीं है ** मशीन कोड। सी # सीएलआर भाषाओं जैसे सी # के लिए चला जाता है। – Pacerier

+0

जावा और सी # दोनों में रनटाइम घटक शामिल है, जो कि जेआईटी देशी कोड में बाइटकोड संकलित करता है। –

5

सामान्य भाषा रनटाइम (सीएलआर) के नियंत्रण में चलने वाला कोड प्रबंधित कोड के रूप में जाना जाता है। कोड जो सीएलआर के तहत नहीं चलता है उसे देशी कोड के रूप में जाना जाता है।

संबंधित मुद्दे