0

.NET (C++ など) に新しい配置はありますか?

つまり、VB.NET でメモリを割り当てた場合


Dim Foo(64) as Byte

BarClass を Foo メモリにインスタンス化したい (次のような...)


Dim Bar as New BarClass(Foo)

ただし、これを行うための構文はありません。

代わりに、次のようなことをしなければなりません:


Dim Foo(1) as BarClass
Foo(0) = new BarClass(x, y, z)
Foo(1) = new BarClass(x, y, z)
4

3 に答える 3

2

いいえ、.NET には同等のものはありません。

さらに、GC はいつでもオブジェクトをメモリ内で自由に移動できます (オブジェクトが場所に固定されていない場合)。通常、この種の動作は、ほとんどの .NET コードで回避されます。

これは、ネイティブ コードと相互運用機能を使用して回避できます。

于 2009-07-22T00:05:47.153 に答える
0

LayoutKindを見てください。明示的に設定すると、C++ ユニオンのような動作が得られます。

于 2009-07-22T00:06:08.620 に答える
0

C++ で配置を使用する理由は、64 バイトのメモリを要求すると、オペレーティング システムが実際に 64 バイトのメモリを提供するためです。したがって、一度に多数のオブジェクトを作成する必要がある場合は、前もってより大きなメモリ ブロックを割り当て、そのブロックのセグメントを使用してそれぞれの新しいオブジェクトを作成する方が効率的です。

C# などのマネージ言語では、これは既に行われています。64 バイトのメモリを要求すると、フレームワークはブロック全体を割り当て、そのブロック (または以前に割り当てられた別のブロック) から 64 バイトを提供します。

于 2009-07-22T00:22:46.800 に答える