"प्रबंधित" और "अप्रबंधित" के बीच अंतर


138

मैं कभी-कभी .NET के बारे में बात करते समय इसके बारे में सुनता / पढ़ता हूं, उदाहरण के लिए "प्रबंधित कोड" और "अप्रबंधित कोड" लेकिन मुझे नहीं पता कि वे क्या हैं और उनके अंतर क्या हैं। परिभाषा के अनुसार, उनके अंतर क्या हैं? दोनों में से किसी के उपयोग के क्या परिणाम हैं? क्या यह अंतर केवल .NET / Windows में मौजूद है?


जवाबों:


190

प्रबंधित कोड

प्रबंधित कोड वह है जो Visual Basic .NET और C # कंपाइलर बनाता है। यह सीएलआर (सामान्य भाषा रनटाइम) पर चलता है, जो अन्य चीजों के अलावा, कचरा संग्रह, रन-टाइम प्रकार की जाँच और संदर्भ जाँच जैसी सेवाएं प्रदान करता है। तो, इसे ऐसे समझें, "मेरा कोड CLR द्वारा प्रबंधित है।"

विजुअल बेसिक और C # केवल प्रबंधित कोड का उत्पादन कर सकते हैं , इसलिए, यदि आप उन भाषाओं में से एक में एप्लिकेशन लिख रहे हैं, जो आप CLR द्वारा प्रबंधित एप्लिकेशन लिख रहे हैं। यदि आप Visual C ++ .NET में एक एप्लीकेशन लिख रहे हैं तो आप चाहें तो प्रबंधित कोड का उत्पादन कर सकते हैं, लेकिन यह वैकल्पिक है।

अनवांटेड कोड

मानवरहित कोड सीधे मशीन कोड के लिए संकलित करता है। तो, उस परिभाषा के अनुसार पारंपरिक C / C ++ संकलक द्वारा संकलित सभी कोड 'मानवरहित कोड' है। इसके अलावा, चूंकि यह मशीन कोड को संकलित करता है और मध्यवर्ती भाषा नहीं है, इसलिए यह गैर-पोर्टेबल है।

कोई मुफ्त मेमोरी प्रबंधन या कुछ और सीएलआर प्रदान नहीं करता है।

चूँकि आप Visual Basic या C # के साथ अनवांटेड कोड नहीं बना सकते हैं, Visual Studio में सभी unmanaged कोड C / C ++ में लिखे गए हैं।

दोनों को मिलाते हुए

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

यहाँ एक उदाहरण है जिसे मैंने गुग्लिंग द्वारा पाया है :

#using <mscorlib.dll>
using namespace System;

#include "stdio.h"

void ManagedFunction()
{
    printf("Hello, I'm managed in this section\n");
}

#pragma unmanaged
UnmanagedFunction()
{
    printf("Hello, I am unmanaged through the wonder of IJW!\n");
    ManagedFunction();
}

#pragma managed
int main()
{
    UnmanagedFunction();
    return 0;
}

11
"चूंकि आप Visual Basic या C # के साथ अनवांटेड कोड नहीं बना सकते हैं, सभी unmanaged कोड C / C ++ में लिखे गए हैं?" आप जानते हैं कि, C, C ++, C #, और VB के अलावा अन्य भाषाएँ भी हैं। मैं मानवरहित कोड लिखने के लिए डेल्फी का उपयोग करता हूं। इसके अलावा, प्रबंधित (.NET) और अनवांटेड (Win32) कोड के बीच एक अंतर दिखाई देता है, वह यह है कि पूर्व सभी .NET फ़ंक्शन का उपयोग कर सकता है, जबकि बाद वाला मूल Windows API का उपयोग करता है।
एंड्रियास रिजेब्रांड

22
आईआर से मशीन कोड को अलग करने के लिए 'प्रबंधित' और 'अप्रबंधित' शब्दों का आविष्कार किया गया था। तो, वे केवल .NET के संदर्भ में वास्तव में अर्थ रखते हैं । लिनक्स कर्नेल भी अप्रबंधित कोड के लिए संकलित करता है, लेकिन यह वास्तव में चर्चा के लिए प्रासंगिक नहीं है, क्या यह है?
kurige

6
यह ऑफ-टॉपिक हो रहा है, लेकिन मेरा कहना यह है कि आपके पास डेल्फी में प्रबंधित कोड लिखने का विकल्प नहीं है , इसलिए यह बताते हुए कि आप डेल्फी में अनवांटेड कोड लिखते हैं , अत्यधिक अनावश्यक है। किसी भी मामले में, मैंने "दृश्य स्टूडियो में" अपमानजनक वाक्य में जोड़ा है। इसके अलावा, टाइपो पर सिर के लिए धन्यवाद। किसी तरह मैं एक दूसरे पढ़ने के माध्यम से भी याद किया।
kurige

बस एक पेडैंड होने के लिए, सी # में अनवांटेड कोड लिखना संभव है ( "असुरक्षित" कोड के रूप में जाना जाता है )
बेसिक

2
@JacksonTale Java .NET के संदर्भ में नहीं है, इस प्रकार इसे प्रबंधित या अप्रबंधित किए जाने की अवधारणा लागू नहीं होती है। जावा कैसे संकलित करता है, इसके स्पष्टीकरण के लिए stackoverflow.com/questions/1326071/… देखें ।
इवान फ्रिस्क

84

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


इस परिभाषा के अनुसार, जावास्क्रिप्ट अप्रबंधित कोड के रूप में अच्छी तरह से, सही होगा?
हैम्पटन टेरी

@ HamptonTerry जावास्क्रिप्ट में स्वचालित मेमोरी प्रबंधन, कचरा संग्रह और प्रकार की सुरक्षा है ... इसलिए नहीं। जावास्क्रिप्ट का प्रबंधन किया जाता है।
संकर्ण

13

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

http://en.wikipedia.org/wiki/Managed_code

http://www.developer.com/net/cplus/article.php/2197621/Managed-Unmanaged-Native-What-Kind-of-Code-Is-This.htm


1
हाँ। इस उत्तर को जोड़ने के लिए, प्रबंधित कोड वह कोड है जिसे आप .NET फ़ंक्शन का उपयोग करके सामान्य रूप से .NET (C C में, उदाहरण के लिए) लिखते हैं। देशी विंडोज एपीआई (किसी भी भाषा में लिखी गई, शायद सी) का उपयोग करते हुए मूल विंडोज एप्लिकेशन, "अप्रबंधित" हैं।
एंड्रियास रिजेब्रांड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.