* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Типы значений и ссылочные типы
7 февраля 2009
Как говорилось ранее, в .NET Framework две разновидности типов: ссылочные типы (reference types) и типы значений (value types). Основное различие между ними за- ключается в способе доступа к переменным, объявленным с этими типами. Чтобы разобраться в сути этого различия, необходимо кратко пояснить основы динами- ческого использования памяти.
Занимаемая приложением память складывается из двух основных компонентов: стека (stack) и кучи (heap). Стек — это область памяти, резервируемая для исполне- ния программы. Стек напоминает стопку тарелок: если нужна чистая тарелка, бе- рут тарелку из стопки (то есть ту, которую положили последней). С переменными программы происходит то же самое: при вызове функции все объявленные в ней переменные заталкиваются в стек (эта операция называется push); если эта функ- ция вызовет другую функцию, то все переменные, объявленные новой функцией, тоже попадут в стек. Когда функция, вызванная последней, завершится, ее пере- менные выходят из области видимости (scope) программы и выталкиваются из сте- ка (эта операция называется pop); в результате память, занимаемая этими перемен- ными, освобождается, и выполнение программы продолжается. Куча — отдельная область памяти, резервируемая для создания объектов, кото- рые предназначены для многократного использования. CLR выделяет в куче па- мять под объекты и управляет утилизацией памяти, занятой неиспользуемыми объектами, посредством механизма под названием сбор мусора.