प्रोग्रामिंग में प्रबंधित या अप्रबंधित कोड क्या है?


150

मैं अपने C # कोड में एक विशिष्ट कमांड का उपयोग कर रहा हूं, जो अच्छी तरह से काम करता है। हालांकि, यह "अप्रबंधित" कोड में दुर्व्यवहार करने के लिए कहा जाता है।

प्रबंधित या अप्रबंधित कोड क्या है?


जवाबों:


75

अनवांटेड कोड के बारे में MSDN के कुछ पाठ यहां दिए गए हैं ।

कुछ पुस्तकालय कोड को अप्रबंधित कोड (उदाहरण के लिए, मूल कोड API जैसे Win32) में कॉल करने की आवश्यकता होती है। क्योंकि इसका मतलब प्रबंधित कोड के लिए सुरक्षा परिधि से बाहर जाना है, क्योंकि सावधानी बरतने की आवश्यकता है।

प्रबंधित कोड के बारे में कुछ अन्य मानार्थ अन्वेषण यहां दिए गए हैं:

  • कोड जो सीएलआर द्वारा निष्पादित किया जाता है।
  • कोड जो सामान्य भाषा रनटाइम को लक्षित करता है। .NET फ्रेमवर्क की नींव, प्रबंधित कोड के रूप में जाना जाता है।
  • प्रबंधित कोड मेमोरी, प्रबंधन, क्रॉस-भाषा एकीकरण, कोड एक्सेस सुरक्षा और वस्तुओं के स्वचालित जीवनकाल नियंत्रण जैसी सेवाएं प्रदान करने के लिए CLR के लिए आवश्यक मेटाडेटा की आपूर्ति करता है। IL पर आधारित सभी कोड प्रबंधित कोड के रूप में निष्पादित होते हैं।
  • सीएलआई निष्पादन पर्यावरण के तहत निष्पादित कोड।

आपकी समस्या के लिए:

मुझे लगता है कि यह इसलिए है क्योंकि NUnit UnitTesting के लिए आपके कोड को निष्पादित करता है और इसका कुछ हिस्सा अप्रबंधित हो सकता है। लेकिन मैं इसके बारे में निश्चित नहीं हूं, इसलिए इसे सोने के लिए न लें। मुझे यकीन है कि कोई व्यक्ति आपको इसके बारे में अधिक जानकारी देने में सक्षम होगा। आशा करता हूँ की ये काम करेगा!


12
मैं आपके उत्तर में जाने के प्रयास की सराहना करता हूं। लेकिन जिन लोगों को पता नहीं है कि "प्रबंधित कोड" क्या है, वे आपके जवाब में आपके मतलब के साथ संघर्ष करने जा रहे हैं: वे नहीं जानेंगे: "पुस्तकालय कोड", "अप्रबंधित कोड", "मूल कोड एपीआई", सीएलआर, .net ढांचे की नींव, आईएल, सीएलआई निष्पादन पर्यावरण आदि आदि
बीकेएसपार्जन

200

यह विषय के बारे में एक अच्छा लेख है।

संक्षेप में,

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

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

  1. मानवरहित कोड मशीन कोड के लिए संकलित किया जाता है और इसलिए सीधे ओएस द्वारा निष्पादित किया जाता है। इसलिए यह हानिकारक / शक्तिशाली चीजें करने की क्षमता है जो प्रबंधित कोड नहीं करता है। यह वही है जो सब कुछ काम करता था, इसलिए आमतौर पर यह पुराने सामान जैसे .dll से जुड़ा होता है।

एक निष्पादन योग्य कार्यक्रम जो अपने आप चलता है। ऑपरेटिंग सिस्टम से लॉन्च किया गया, प्रोग्राम कॉल करता है और ऑपरेटिंग सिस्टम में सॉफ़्टवेयर रूट का उपयोग करता है, लेकिन इसके लिए किसी अन्य सॉफ़्टवेयर सिस्टम का उपयोग करने की आवश्यकता नहीं होती है। असेंबली लैंग्वेज प्रोग्राम जिन्हें मशीन लैंग्वेज और C / C ++ प्रोग्राम में असेंबल किया गया है, एक विशेष प्लेटफॉर्म के लिए मशीन लैंग्वेज में संकलित किए गए हैं, जो अप्रबंधित कोड के उदाहरण हैं। (और पढ़ें )

  1. मूल कोड अक्सर अप्रबंधित का पर्याय है, लेकिन समान नहीं है।

आपका मतलब है कि हैकिंग में हम .net लैन्गॉज (C #, C ++), सही का उपयोग नहीं कर सकते हैं?
हारून ए।

7
@H_wardak आप 'हैकिंग' के रूप में क्या परिभाषित करते हैं? यह एक बहुत ही सामान्य शब्द है, यह NORAD में हैकिंग और कुछ रजिस्टरों को हैक करने जैसा है।
एलेक्स

7
मुझे एक बार साक्षात्कारकर्ता द्वारा पूछा गया है, क्या हम C # में अप्रबंधित कोड चला / लिख सकते हैं? क्या कोई इसमे मेरी मदद कर सकता है?
RSB

9
@ आरएसबी: आप सी # में मानवरहित कोड नहीं लिख सकते हैं (हालाँकि, आप सीधे सी # से अप्रबंधित कोड को कॉल कर सकते हैं)। सैद्धांतिक रूप से, सही संकलक और ढांचे के साथ, आप यह कर सकते थे, मुझे लगता है। व्यवहार में, इसका मतलब है कि आपको एक संकलक की आवश्यकता होगी जो C # को मशीन कोड से सीधे संकलित कर सके। निश्चित नहीं है कि यह कैसे काम करेगा।
जेम्स हग

67

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

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

प्रबंधित चर से परिवर्तित करने के लिए, मानवरहित व्यक्ति से कहें, आपको वास्तविक वस्तु को स्वयं प्राप्त करना होगा। यह शायद कुछ अतिरिक्त पैकेजिंग में लिपटा या बॉक्सिंग है। अनवांटेड वैरिएबल (जैसे 'इंट', कहते हैं) - 32 बिट मशीन पर - बिल्कुल 4 बाइट्स लेता है। कोई ओवरहेड या अतिरिक्त पैकेजिंग नहीं है। प्रबंधित अप्रबंधित कोड से जाने की प्रक्रिया - और फिर से - " मार्शलिंग " कहा जाता है । यह आपके कार्यक्रमों को सीमा पार करने की अनुमति देता है।


1
फिर कैसे मूल्य और संदर्भ प्रकारों के साथ मेल-मिलाप होता है? मैं उदाहरण के लिए MarsBBRROObject के बारे में कुछ देखकर याद करता हूं।
काइल बरन

24

यथासंभव कम शब्दों में:

  • प्रबंधित कोड = .NET प्रोग्राम
  • अनवांटेड कोड = "सामान्य" प्रोग्राम

16
एक .NET प्रोग्राम "सामान्य" नहीं है?
21

1
@ जटेट - वह इसे थोड़ा नीचे डंप कर रहा है, हाँ। :) मैं इसे और अधिक सहज बनाने की कोशिश कर रहा था। वैसे भी, कि 8 साल पहले खत्म हो गया था। आज आम रोजमर्रा के उपयोग में प्रोग्रामिंग भाषाओं के असंख्य के साथ, यह अंतर वास्तव में और भी अधिक है, हाँ।
विल्क्स-

5

प्रबंधित कोड वह है जो C # .Net, VB.Net, F # .Net आदि संकलक बनाते हैं। यह सीएलआर पर चलता है, जो अन्य चीजों के अलावा कचरा संग्रह, और संदर्भ जाँच, और बहुत कुछ जैसी सेवाएं प्रदान करता है। तो इसे ऐसा समझें, मेरा कोड CLR द्वारा प्रबंधित है।

दूसरी ओर, अप्रबंधित कोड सीधे मशीन कोड के लिए संकलित होता है। यह सीएलआर द्वारा प्रबंधन नहीं करता है।


4

मूल रूप से अप्रबंधित कोड कोड है जो .NET CLR (उर्फ VB.NET, C #, आदि) के तहत नहीं चलता है। मेरा अनुमान है कि Nnnit में एक धावक / आवरण है जो .NET कोड (उर्फ C ++) नहीं है।


4

प्रबंधित कोड:
वह कोड जो आम भाषा के रनटाइम के साथ "सहयोग के अनुबंध" के तहत चलता है। प्रबंधित कोड को स्मृति प्रबंधन, क्रॉस-भाषा एकीकरण, कोड एक्सेस सुरक्षा और वस्तुओं के स्वचालित जीवनकाल नियंत्रण जैसी सेवाएं प्रदान करने के लिए रनटाइम के लिए आवश्यक मेटाडेटा की आपूर्ति करनी चाहिए। Microsoft मध्यवर्ती भाषा (MSIL) पर आधारित सभी कोड प्रबंधित कोड के रूप में निष्पादित होते हैं।

Un-Managed Code:
वह कोड जो सामान्य भाषा के क्रम के सम्मेलनों और आवश्यकताओं की परवाह किए बिना बनाया जाता है। कम से कम सेवाओं (उदाहरण के लिए, कोई कचरा संग्रह, सीमित डिबगिंग, और इतने पर) के साथ आम भाषा रनटाइम वातावरण में अप्रबंधित कोड निष्पादित करता है।

संदर्भ: http://www.dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx


3

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


2

प्रबंधित कोड CLR यानी .NET रनटाइम के वातावरण के अंदर चलता है। सभी में IL प्रबंधित कोड हैं। लेकिन यदि आप कुछ तृतीय पक्ष सॉफ़्टवेयर उदाहरण VB6 या VC ++ घटक का उपयोग कर रहे हैं, तो वे .NET रनटाइम (CLR) के रूप में अप्रबंधित कोड का नियंत्रण नहीं रखते हैं। भाषा के स्रोत कोड निष्पादन पर।


1

प्रबंधित कोड: - वह कोड जिसे MSIL (मध्यवर्ती भाषा) का रूप भाषा संकलक संकलन के बाद विकसित किया CLRजाता है और सीधे प्रबंधित कोड द्वारा निष्पादित किया जाता है। जैसे: - .net फ्रेमवर्क द्वारा समर्थित सभी 61 भाषा कोड

अनवांटेड कोड: - वह कोड जो पहले विकसित .netकिया गया था जिसके लिए MSIL फॉर्म उपलब्ध नहीं है और इसे CLRसीधे द्वारा निष्पादित किया जाता है बल्कि CLRऑपरेटिंग सिस्टम पर रीडायरेक्ट किया जाएगा इसे अनमैन्ड कोड के रूप में जाना जाता है।

जैसे: -COM, Win32 API


इस पोस्ट में कई गलतियाँ हैं। सबसे स्पष्ट रूप से MISL (आपका मतलब MSIL) है।
मैट सीमोर

1
  • प्रबंधित कोड: C #, VB.NET जैसी .NET भाषा में लिखा गया कोड।
  • अनवांटेड कोड: .NET लैंग्वेज और MSIL में लिखे कोड को यह समझ में नहीं आता कि यह क्या है और CLR के तहत नहीं चल सकता; तृतीय-पक्ष नियंत्रणों की तरह हम अपने .NET अनुप्रयोगों में उपयोग करते हैं जो .NET भाषाओं में नहीं बनाया गया है।

0

सबसे पहले यह समझें, पहले .NET framework, Microsoftस्टैंड-अलोन उत्पाद प्रदान कर रहे थे जैसे MFC (Visual C++), VB, FoxProआदि।

2002 में, Microsoft ने अपने उत्पादों को संयोजित किया और .NET फ्रेमवर्क बनाया। अब एक अंतर है कि कैसे कोड को पहले निष्पादित किया गया था और कैसे कोड प्रबंधित और .NET फ्रेमवर्क में निष्पादित किया गया है। Microsoft ने CLR.NET फ्रेमवर्क के साथ अवधारणा पेश की, जो .NET फ्रेमवर्क के किसी भी समर्थित लैनग्यूग से आने वाले कोड को संकलित करता है और memory mangement, garbage collectionआदि जैसे अतिरिक्त कार्यात्मकता प्रदान करता है । लेकिन, ऐसी सीएलआर सुविधाएँ सीधे पहले उपलब्ध नहीं थीं।

इसलिए यदि आप .NET फ्रेमवर्क (CLR के साथ संकलित) में लाइब्रेरी / कोड बना रहे हैं तो उसे कहा जाता है Managed code। आप इस लाइब्रेरी को अन्य .NET एप्लिकेशन / प्रोजेक्ट में आगे उपयोग कर सकते हैं, और वहां भी, CLR समझेंगे कि इसे पहले कैसे संकलित किया गया था, और इसीलिए यह आपका प्रबंधन कोड बना हुआ है।

OTOH यदि आप .NET फ्रेमवर्क से पहले लिखे गए पुस्तकालयों का उपयोग करना चाहते हैं तो आप कुछ सीमाओं के साथ कर सकते हैं, लेकिन याद रखें, चूंकि CLR उस समय नहीं था, इसलिए अब, CLR इस कोड को फिर से समझ और संकलित नहीं करेगा। । और यह कहा जाएगा unmanaged code। कृपया ध्यान दें कि, कुछ सुविधाएँ / उपकरण प्रदान करने के लिए कुछ तृतीय पक्ष द्वारा बनाई गई लाइब्रेरी / असेंबली को भी सीएलआर कॉम्पीटेबली नहीं होने पर अप्रबंधित कोड माना जा सकता है।

आम शब्दों में, प्रबंधन कोड वह चीज है जिसे आपका सीएलआर समझता है और इसे आगे के निष्पादन के लिए स्वयं संकलित कर सकता है। .NET फ्रेमवर्क में, (किसी भी भाषा से। .NET फ्रेमवर्क पर काम होता है) जब कोड सीएलआर में जाता है तो कोड कुछ मेटा डेटा की जानकारी की आपूर्ति करता है, ताकि सीएलआर आपको यहां निर्दिष्ट सुविधाएँ प्रदान कर सके । उनमें से कुछ Garbage collection, Performance improvements, cross-language integration, memory managementआदि हैं ।

OTOH, अनमांग कोड मशीन के लिए कुछ विशिष्ट है और उपयोग के लिए तैयार है, इसे आगे संसाधित करने की आवश्यकता नहीं है।


बहुत सारे और बहुत सारे और बहुत सारे विचार, मैं डरता हूं। यह एक आश्चर्य के रूप में आ सकता है, लेकिन सीएलआर अप्रबंधित कोड (आमतौर पर C ++ / CLI में लिखे गए) को भी निष्पादित कर सकता है। आईएल के रूप में प्रबंधित कोड उपलब्ध होने के लिए भी कोई आवश्यकता नहीं है। .NET नेटिव में अभी कुछ समय रहा है, और यह पूर्व-संकलित असेंबली के साथ आता है। जिसे आप "सीएलआर संगत" कहते हैं, वह संभवतः "सीएलएस अनुरूप" है । सीएलएस अनुपालन को पूरा करने में विफलता प्रबंधित कोड को अप्रबंधित नहीं करता है, अचानक। अप्रबंधित कोड का उपभोग करना - आपके विवरण के बावजूद - साथ ही (आरसीडब्ल्यू ओवर कॉम, पी / इनवोक, सी ++ / सीएलआई, आदि) के रूप में बहुत आसान है।
IInspectable

0

Pro C # 5 और .NET 4.5 फ्रेमवर्क से:

प्रबंधित बनाम अप्रबंधित कोड: शायद C # भाषा के बारे में समझने के लिए सबसे महत्वपूर्ण बिंदु यह है कि यह कोड का उत्पादन कर सकता है जो केवल .NET रनटाइम के भीतर निष्पादित हो सकता है (आप मूल COM सर्वर या एक अप्रबंधित C / C ++ का निर्माण करने के लिए C # का उपयोग नहीं कर सकते हैं) आवेदन)। आधिकारिक तौर पर बोलते हुए, .NET रनटाइम को लक्षित करने वाले कोड का वर्णन करने के लिए प्रयुक्त शब्द प्रबंधित कोड है। बाइनरी यूनिट जिसमें प्रबंधित कोड होता है, उसे असेंबली कहा जाता है (बस थोड़ी सी में असेंबली पर अधिक विवरण)। इसके विपरीत, .NET रनटाइम द्वारा सीधे होस्ट नहीं किए जा सकने वाले कोड को मानवरहित कोड कहा जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.