2009-07-28 3 views
1

Можно ли создать объект моего класса в стеке относительно .net и C#? Например:создание объекта в стеке

class abc { int i=1; } 
abc a1=new abc(); 

Теперь здесь создается объект в куче. Итак, есть ли способ создать объект в стеке памяти RAM, если размер объекта невелик?

+0

Вы имеете в виду свой собственный стек? или в стеке объектов? –

+0

Ваш вопрос непонятен (я не могу сказать, что вы ищете). Вы можете быть закрыты, если не сможете уточнить, что вы ищете. –

+0

класс abc { int i = 1; } abc a1 = new abc(); сейчас, здесь объект создан в куче. так, есть ли способ создать объект в стеке памяти RAM, поскольку размер объекта невелик? – Amit

ответ

7

Типы ссылок .NET всегда живут на куче GC. Их невозможно найти в другом месте. Даже C++/CLI, который поддерживает такие вещи, как

System::Random rnd; 
rnd.Next(); 

, который выглядит как переменные стека, на самом деле создает Random класс, на GC кучу (и вызывает его метод Dispose в конце блока, если он реализует IDisposable.)

Это, как говорит Эрик Липперт, the stack is an implementation detail, и вам следует в первую очередь заботиться о семантике ссылок или значений типов, которые вы создаете.

0

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

0

Я не знаю, зачем вам нужен объект в стеке вместо кучи. Основная причина этого (по крайней мере, основная причина, по которой я знаю) - RAII. Компилятор в C++ гарантирует, что каждый объект, созданный в стеке, будет уничтожен, когда он покинет область видимости.

В C# архивировать то же самое с помощью-заявления: http://msdn.microsoft.com/en-us/library/yh598w02.aspx

1

Если вы используете struct вместо class, вы создаете значение типа, который будет создан в стеке. Там есть lots of things to consider. Книга Руководство по дизайну каркаса не дает конкретного предложения, но указывает, что, вероятно, лучше всего провести сравнение различий и определить, действительно ли стоит реализовать тип значения.

Смежные вопросы