マーシャリング–それは何ですか、なぜそれが必要なのですか?


92

マーシャリングとは何ですか?なぜマーシャリングが必要なのですか?

intC#からCに有線で送信できず、マーシャリングする必要があるとは信じられません。なぜC#は、開始と終了の信号で32ビットを送信し、Cコードに受信したことを通知できないのintですか?

マーシャリングが必要な理由とその使用方法についての良いチュートリアルやサイトがあれば、それは素晴らしいことです。


3
実際、開始信号と終了信号で32ビットを送信することができます。それはintのためにあなた自身のマーシャリングを書くでしょう。しかし、Dictionary <CustomClassA、List <CustomClassB >>をCコードにどのように渡しますか?
Vinko Vrsalovic、2010

4
「オーバー・ザ・ワイヤー」と言うとエンディアンが思い浮かびます。
user7116

trueは、ビッグ/リトルエンディアンまたはその他のバリエーションを無視します。

54
これは少し奇妙な質問です。それは、「なぜ郵便システムが必要なのか。手紙の配達人が通信を受け取り、それを中央の場所に運んで仕分けして、それを宛先に届けるだけのシステムがあるのに、なぜ必要なのか」という質問に似ています。しかし...それは郵便制度です。代わりに、マーシャリングシステムが必要なのに、なぜマーシャリングシステムが必要なのかと質問されました。私はあなたの質問のポイントを逃していると思います。明確にできますか?
Eric Lippert、2010

1
これを理解する最良の方法は、「メソッド」がアセンブリでどのように機能するかを理解することです-最後の命令アドレスがスタックに保存される方法、パラメーターがスタックを介して渡される方法、スタックポインターレジスターがメソッド、命令ポインターによって変更されるレジスタが使用されます。特に、メソッドを実装するためのさまざまな手法にわずかなばらつきがある可能性があります。事実、「ワイヤー」を理解することは、あなたの質問にいくらかの光を当てるべきです。
ylax

回答:


75

言語や環境によって、呼び出し規約、レイアウト規約、プリミティブのサイズ(charC#とCを参照char)、オブジェクト作成/破棄規約、デザインガイドラインが異なります。管理された土地から、管理されていない土地がそれを見て理解できる場所に、またはその逆に、ものを取り出す方法が必要です。それがマーシャリングの目的です。


25

.NETコード(C#、VB)は、CLR(共通言語ランタイム)によって「管理」されるため、「管理」と呼ばれます。

C、C ++、またはアセンブラーでコードを記述する場合、CLRが関与しないため、すべて「アンマネージ」と呼ばれます。すべてのメモリの割り当て/割り当て解除は、ユーザーが行う必要があります。

マーシャリングは、マネージコードとアンマネージコードの間のプロセスです。CLRが提供する最も重要なサービスの1つです。


11

マーシャリングは、intCのコードがそれを見ることができるどこかにCLRの管理スタックからメモリをコピー:あなたが言っただけで何理想的です。文字列、オブジェクト、配列、その他の型のマーシャリングは難しいことです。

しかし、P / Invoke相互運用層は、これらのほとんどすべてのことを処理します。


2
マーシャリングは実際にコピー操作を行っていますか?私はリアルタイムの画像処理操作を見ており、メモリ内のすべてのコピーを作成する必要がないことを望んでいます。
ias

7

Vinkoがコメントで述べているように、特別なマーシャリングなしでプリミティブ型を渡すことができます。これらは「blittable」タイプと呼ばれ、バイト、ショート、int、ロングなどのタイプと、それらの符号なしのタイプが含まれます。

このページには、ブリット可能タイプと非ブリット可能タイプのリストが含まれています


7

マーシャリングは、ピンボークを使用して、管理されていない世界のデータ型と通信したり、その逆を行ったりするために、より良い言葉やゲートウェイが必要な「媒体」であり、データが安全な方法で返されるようにします。


2

マーシャリングとは、関数のシグネチャを別のマシンにある別のプロセスに渡すことです。通常、マーシャリングは、構造化データを専用フォーマットに変換することによって実装され、他のプロセッサシステムに転送できます(シリアル化/非シリアル化)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.