C#

Лорд Пневмослон 2010 M05 31
7694
23
0
0

Памятный день сегодня - начал кодить на сабже. Как и полагается первым был "привет, мир", а потом софтина по расчету ионно-имплантированных структур полупроводниковых приборов - писали диплом...

Памятный день сегодня - начал кодить на сабже. Как и полагается первым был "привет, мир", а потом софтина по расчету ионно-имплантированных структур полупроводниковых приборов - писали диплом Томич-куну.

Очень порадовал язык, хотя не разобрался толком с хранением данных в стеке или куче.

Оцените пост

0

Комментарии

0
В С# размерные типы (например, целые числа) располагаются в стеке: для их значений зарезервирована область в стеке, и доступ к ней осуществляется по названию переменной. Стек, - это структура данных по принципу "последний вошел - первый вышел". И относится к области памяти, в которой сохраняются локальные переменные. Доступ к стеку во много раз быстрее, чем к общей области памяти, поэтому использование стека для хранения данных ускоряет работу программы.

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

Разница в скорости работы со стеком или кучей возникает в то время, когда нужно занять/освободить место в памяти. Стек всегда готов к размещению новых данных и всегда готов у удалению данных. А кучей по сути является свободное пространство в памяти и для того чтоб разместить в ней данные, нужно обратиться к менеджеру памяти, менеджер памяти найдет свободное место нужного размера в памяти, зарегистрирует его как занятый и вернет адрес этого блока в программу. При удалении блока данных из кучи так же нужно обратиться к менеджеру памяти, менеджер памяти пометит данный кусок памяти как свободный.

Однако согласно MSDN http://msdn.microsoft.com/ru-ru/library/ms173110(VS.90).aspx в последних версиях .NET процесс выделения и освобождения памяти в управляемой куче значительно оптимизирован. В большинстве случаев нет существенной разницы в затратах производительности на выделение экземпляра класса в куче и выделение экземпляра структуры в стеке.

0
у меня есть эта паста, толком пока не вникнул. в любом случае, спасибо
0
Когда создаешь, например, экземпляр класса, то память под него выделяется в куче. В общем, любой динамический объект хранится в куче, как-то так.
0
а там разве надо о памяти думать? мне наоборот очень понравилось что о ней и о многом другом думают за тебя)
0
Да ты смеешься верно. Чего тут вникать, все по полочкам разложено :)
Что непонятного то?
Показать комментарии