.NET Placement New

时间:2009-07-22 00:00:45

标签: c# .net vb.net syntax new-operator

.NET中是否有新的展示位置(如C ++)?

换句话说,如果我在VB.NET中分配一些内存


Dim Foo(64) as Byte

我想在Foo内存中实例化BarClass(类似于......)


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)

3 个答案:

答案 0 :(得分:2)

不,.NET中没有公平。

此外,GC可以随时随地在内存中移动对象(前提是它没有被固定到某个位置)。这种行为通常是大多数.NET代码中避免的行为。

您可以使用本机代码和互操作来解决此问题。

答案 1 :(得分:0)

看看LayoutKind。设置为显式将为您提供类似行为的c ++联合。

答案 2 :(得分:0)

在C ++中使用展示位置的原因是因为当您要求64字节的内存时,操作系统确实为您提供了64字节的内存。因此,如果您需要一次创建一堆对象,那么预先分配更大的内存块并使用该块的一部分创建每个新对象会更有效。

在C#等托管语言中,已经为您完成了。当你要求64字节的内存时,框架会分配一个整个块,并从该块(或另一个先前分配的块)中提供64个字节。