Размещение .NET Новое - PullRequest
0 голосов
/ 22 июля 2009

Есть ли новое размещение в .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)

Ответы [ 3 ]

2 голосов
/ 22 июля 2009

Нет, в .NET нет эквивалентов.

Кроме того, GC может свободно перемещать ваш объект в памяти, когда он этого хочет (при условии, что он не был прикреплен к определенному месту). Такой тип поведения обычно избегается в большинстве .NET-кода.

Вы можете обойти это, используя собственный код и взаимодействие.

0 голосов
/ 22 июля 2009

Причина, по которой вы используете места размещения в C ++, заключается в том, что когда вы запрашиваете 64 байта памяти, операционная система действительно дает вам 64 байта памяти. Поэтому, если вам нужно создать сразу несколько объектов, более эффективно заранее выделить больший блок памяти и создать каждый новый объект с сегментом этого блока.

В управляемых языках, таких как C #, это уже сделано для вас. Когда вы запрашиваете 64 байта памяти, каркас выделяет целый блок и выдает 64 байта из этого блока (или другого ранее выделенного блока).

0 голосов
/ 22 июля 2009

Взгляните на LayoutKind . Установка в явное даст вам c ++ объединение, подобное поведению.

...