मार्शलिंग - यह क्या है और हमें इसकी आवश्यकता क्यों है?


92

मार्शलिंग क्या है और हमें इसकी आवश्यकता क्यों है?

मुझे यह विश्वास करना मुश्किल है कि मैं intसी # से तार पर एक ओवर नहीं भेज सकता और इसे मार्शेल करना होगा। C # सिर्फ 32 बिट्स को एक प्रारंभिक और समाप्ति संकेत के साथ क्यों नहीं भेज सकता, C कोड को बताए कि उसे एक प्राप्त हुआ है int?

अगर किसी अच्छे ट्यूटोरियल या साइट के बारे में बताया गया है कि हमें मार्शलिंग की आवश्यकता क्यों है और इसका उपयोग कैसे करना है, तो यह बहुत अच्छा होगा।


3
वास्तव में, आप 32 बिट्स को एक शुरुआती और समाप्ति संकेत के साथ भेज सकते हैं । यह एक int के लिए अपने खुद के मार्शल लेखन होगा। लेकिन आप एक कोड <CustomClassA, List <CustomClassB >> से C कोड कैसे पास करेंगे?
विन्को वेर्सालोविक

4
जब आप "ओवर द वायर" कहते हैं तो मन में धीरज आ जाता है।
user7116

सच बड़े / छोटे एंडियन या किसी अन्य भिन्नता की उपेक्षा करता है।

54
यह एक अजीब सा सवाल है। यह पूछने के बजाय "हमें एक डाक प्रणाली की आवश्यकता क्यों है, जब हमें बस एक प्रणाली हो सकती है जहां पत्र वाहक पत्राचार उठाते हैं, इसे छंटाई के लिए केंद्रीय स्थानों पर ले जाते हैं, और फिर इसे पते पर पहुंचा सकते हैं?" लेकिन ... यह एक डाक प्रणाली है। आप पूछते हैं कि हमें एक मार्शल प्रणाली की आवश्यकता क्यों है जब इसके बजाय हम ... एक मार्शल प्रणाली हो सकती है। मुझे लगता है कि मुझे आपके प्रश्न की बात याद आ रही है। क्या आप स्पष्ट कर सकते हो?
एरिक लिपर्ट

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

जवाबों:


75

क्योंकि अलग-अलग भाषाओं और परिवेशों में अलग-अलग कॉलिंग कन्वेंशन, अलग-अलग लेआउट कन्वेंशन, आदिम के विभिन्न आकार ( charC # और charC में Cf), अलग ऑब्जेक्ट निर्माण / विनाश कन्वेंशन, और अलग-अलग डिज़ाइन दिशानिर्देश हैं। आपको प्रबंधित भूमि से बाहर निकलने के लिए एक ऐसे रास्ते की ज़रूरत होती है, जहाँ पर अप्रबंधित भूमि इसे देख और समझ सके और इसके विपरीत। यही मार्शलिंग के लिए है।


25

.NET कोड (C #, VB) को "प्रबंधित" कहा जाता है क्योंकि यह CLR ( सामान्य भाषा रनटाइम ) द्वारा "प्रबंधित" किया जाता है

यदि आप C या C ++ या कोडांतरक में कोड लिखते हैं, तो इसे सभी "अनवांटेड" कहा जाता है, क्योंकि कोई CLR इसमें शामिल नहीं है। आप सभी मेमोरी आवंटन / डी-आवंटन के लिए जिम्मेदार हैं।

मार्शिंगलिंग प्रबंधित कोड और अनवांटेड कोड के बीच की प्रक्रिया है; यह सीएलआर द्वारा दी जाने वाली सबसे महत्वपूर्ण सेवाओं में से एक है ।


11

मार्शलिंग एक intआदर्श रूप से सिर्फ वही है जो आपने कहा था: सीएलआर के प्रबंधित स्टैक से मेमोरी को किसी ऐसे स्थान पर कॉपी करना जहां सी कोड इसे देख सकता है। तार, वस्तुओं, सरणियों और अन्य प्रकारों को मार्शल करना मुश्किल काम है।

लेकिन P / Invoke इंटरोप लेयर आपके लिए इन सभी चीजों का ध्यान रखती है।


2
क्या मार्शलिंग वास्तव में कॉपी ऑपरेशन कर रहा है? मैं रियल टाइम इमेज प्रोसेसिंग ऑपरेशन देख रहा हूं, और मेमोरी में हर चीज की कॉपी नहीं बनाना पसंद करूंगा।
इस्स

7

जैसा कि विंको टिप्पणियों में कहते हैं, आप किसी भी विशेष मार्शल के बिना आदिम प्रकार पारित कर सकते हैं। इन्हें "ब्लिटेबल" प्रकार कहा जाता है और इसमें बाइट, शॉर्ट, इंट, लॉन्ग आदि प्रकार और उनके अहस्ताक्षरित समकक्ष शामिल होते हैं।

इस पृष्ठ में ब्लिटेबल और गैर-ब्लिटेबल प्रकारों की सूची है


7

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


2

मार्शल एक फ़ंक्शन के हस्ताक्षर को एक अलग प्रक्रिया पर भेज रहा है जो एक अलग मशीन पर है, और यह आमतौर पर संरचित डेटा को एक समर्पित प्रारूप में परिवर्तित करके कार्यान्वित किया जाता है, जिसे अन्य प्रोसेसर सिस्टम (क्रमांकन / डीरियलाइज़ेशन) में स्थानांतरित किया जा सकता है।

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