2012-02-08 7 views
1

私はLayoutKind.SequentialとLayoutKind.Explicitがクリアだと思いますが、LayoutKind.AutoはどのようにC#で処理されますか?StructLayout.AutoはシーケンシャルおよびExplicitと比べて何を意味しますか?

+1

[documentation](http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.layoutkind.aspx)の内容を理解できませんでしたか? – Oded

+0

@Odedドキュメントには、Autoがどのように動作するかの内部動作が指定されていません。私はこのクエストインがそれが得ているdownvotesに値するとは思わない。 –

+0

@JohnFeminella - 質問は明確ではないので、下落しています。 OPは、彼が理解していないことを特定しなかった。 – Oded

答えて

1

documentationかなり明確ようだ:

ランタイムが自動的に管理されていないメモリ内のオブジェクトの メンバーのための適切なレイアウトを選択します。この 列挙メンバで定義されたオブジェクトは、マネージコードの外部に公開することはできません。 これを行おうとすると例外が生成されます。

つまり、レイアウトは動的であり、オブジェクトがマネージコードの外で使用できなくなることを意味します。

1

MSはhere

共通言語ランタイムは、デフォルトで自動レイアウト値を使用していますと言います。 Auto値に関連するレイアウト関連の問題を軽減するには、C#、 Visual Basic、およびC++コンパイラは値 の型のシーケンシャルレイアウトを指定します。

4

LayoutKind.Auto「これらのフィールドに対応するバイトを並べ替える権限をCLRに与えます」という意味です。これは、メモリの使用、パッキングなどのフィールドをどのように再編成するかを正確に決定します。 の変更は、ドキュメントで指定されていません。これはおそらく、構造の記述方法に関係のない実装の詳細なので、おそらくです。

アンマネージコードは、これらのフィールドが特定の順序になることを期待しているため、アンマネージコードに渡すと、これは常に悪いことです。それらの可能な再編成は、意図しない結果をもたらす可能性があります。そのため、LayoutKind.Auto構造体をアンマネージコードに公開することはできません。

関連する問題