@beduin01

Чем отличаются ссылочные и знаковые типы?

Правильно ли я понимаю, что и те и другие типы хранят саму структуру (ссылку на нее) в стеке, но знаковые в стеке так же хранят ее значение, а у ссылочных в стеке на нее хранится ссылка на кучу. Так?

Есть ли какие-то ограничения на размер структур? Могу я в стек засунуть к примеру файл?

Если я описал структуру,
struct MyStruct
{
//...
}

Правильно ли говорить, что когда я создаю рабочий объект этой структуры я создаю ее экземпляр? Или как оно говорится? Мы "создаем переменную с типом MyStruct"?
  • Вопрос задан
  • 315 просмотров
Пригласить эксперта
Ответы на вопрос 2
tomnolane
@tomnolane
профессиональный разработчик
ЗнаЧимые типы хранят значение, а ссылочные - ссылку на значение. Не знаковые))
class SSylka
{
    public byte Value { get; set; }
}

struct Znachenie {
    public byte Value { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        SSylka _ssylka = new SSylka { Value = 0 };
        Znachenie _znachenie = new Znachenie { Value = 0 };
    }
}

В коде и _ssylka , и _znachenie создаются как локальные переменные метода Main на стеке. Переменная _znachenie содержит значение Value, а переменная _ssylka содержит ссылку на значение Value, хранящееся на куче.

Для ссылочных типов - это куча, для значимых - это стек. При этом, ссылочная переменная (сама ссылка) храниться на стеке. Значимыми могут быть только экземпляры структур

(int, double и т.д.) - это структуры

Мы "создаем переменную с типом MyStruct"?

Вы* создаёте экземпляр (не путать с ссылкой) переменной в стеке типа MyStruct

Могу я в стек засунуть к примеру файл?

Cтек (stack) — это контейнер, работающий по принципу "последний вошел, первый вышел" (last in, first out — LIFO).
Этот класс создает динамическую коллекцию, которая расширяется по мере потребности хранить в ней вводимые элементы. Всякий раз, когда требуется расширить такую коллекцию, ее емкость увеличивается вдвое.
Т.е. можно, но вот зачем? Оптимизированнее будет - если будет в куче, чтобы GC (сборщик мусора) удалил его тогда, когда не нужен будет.... а если файл будет изменяться? (увеличиваться/уменьшаться?).... и так каждый раз при увеличении он будет занимать не всё "пространство" выделенное для него...
Ответ написан
@Rubka
Насчет файла - файл вы точно в стек не сможете упрятать, потому что Stream (единственный способ работы с диском) - это ссылочный тип.
В любом случае - стандартный размер стека - 1Mb
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы