Как работает память в C#? Как это использовать на практике?

preview_player
Показать описание
Поддержи канал, бро!

И даже криптой (пока только Ethereum):
0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77

Продолжаем подготовку к ответу на вопрос, что такое боксинг (boxing). Разбираем, как работает память в C# в деталях. Что такое Stack (стек), что такое Heap (куча). Также рассказываю, как использовать эти знания на практике. Эти знания подходят как для разработчиков в Unity, так и для любых других программистов, работающих на C#.
Для ответа на вопрос, что такое боксинг (boxing), нам необходимо разобраться в более базовых вещах. А именно в типах данных и работе памяти.

Кстати, лайки и донаты волшебным образом ускоряют процесс записи новых видео!

__________

Залетай в Таверну Разработчика в телеге, и делись своими траблами в Unity, вместе разбираться будем!

Подписывайся на канал в телеге, или на твиттер, там я публикую коротенькие типсы и практики, которые помогут писать код лучше, понятнее и эффективнее:
Рекомендации по теме
Комментарии
Автор

В дополнении к прошлому видео про типы данных было бы интересно узнать как работают/хранятся всякие разные типы данных вроде массивов кортежей словарей и тд

CoolinarGameDeveloper
Автор

Мне кажется принцип стека описан неправильно. Обычно стек сравнивают с горой тарелок. Мы складываем тарелки в башню. Кладем мы их очевидно сверху(никтож не будет поднимать половину тарелок, чтобы продолжить ещё одну в центре). А когда мы моем этим тарелки берём мы их соответственно по очереди сверху а не снизу. Т.е. последнее записанное значение уходит первым

leningradetsfromshusharsta
Автор

интересно все что касается оптимизации

nurdachad
Автор

Теперь возникает один вопрос. Если создаём те-же пули, то лучше их создать в начале и менять и transform?

artura
Автор

Ну... Привираешь же. Вот тебе повод для размышлений:

public class Class1
{
private Class2 instance; // ссылка на экземпляр в куче

public Class1()
{
this.instance = new Class2(); // создание экземпляра и размещение его в куче
this.instance.A = 10; // где хранится поле созданного в куче экземпляра?
}
}

public class Class2 { public int A; }

Скалярные (value) типы, являющиеся полями класса, могут храниться как в куче, так и в стеке. Зависит от реализации. Можно сказать (но лучше перепроверить), что в стеке гарантированно хранятся скалярные параметры методов и скалярные локальные переменные (не поля).

andrey_aka_skif
Автор

Префабы - это как раз и есть заранее сохранённый объект в куче? И при его инициализации используется один объект из кучи, а не сохранение новых?

longcourse
Автор

Спасибо за уроки. Объясняешь богичечски! ) Может быть есть возможность и желание, сделать урок о методах работы с объектами в Unity? Что бы не создавать лишние или заранее подготавливать и тп. Было бы очень интересно

seldemirov
Автор

Дико извиняюсь за оффтоп, но хотелось бы узнать, в чем преимущества Райдера над Вижлой и Кодом?

meosart
Автор

Спасибо за видео. Как раз пытаюсь разобраться с памятью. Как она работает. А когда происходит удаление? То есть вот ссылка пошла в стек. Она когда удаляется? Через 10 минут?(улосвно) Не понимаю просто если она удаляется, то в коде же она остается. Вот это момент не могу осознать. Если я на компьютере удаляю ярлык игры с рабочего стола, то он оттуда исчезает. Но ссылка удаялется но никуда не исчезает. Как это.

requiem_for_a_dream
Автор

Stack можно перевести как стопка на русский

Бот-иг
Автор

Да, но почему если ссылка ссылается на ссылку, которая ссылается на кучу, допустим Class a = new Class("a"); Class b = a, а после этого: Class c = new Class("c"); a = c, то изначальная ссылка b не меняется, то есть ссылки копируются, но никак данные?

gopnikkasarj
Автор

Лайк! Расскажи зачем нужны структуры :) Я где-то слышал, что они нужны только для оптимизации. Чтоб ГК разом все чистил.

def
Автор

Я правильно понял что заполнение и очищение происходит между { } для каждого метода т е если это void start то это на старте если void update то каждый кадр?
Соответственно здесь я так понимаю много выводов можно сделать об оптимизации и самое главное не только как но и почему, все таки графически такие моменты легче воспринимаются как в примере с блоками памяти, так что давай про оптимизацию.
Я так понимаю основной вывод, поменьше объектов, по больше ссылок. Хотелось бы на практике увидеть, а то не до конца понял, что объект, а что ссылка в итоге.

sanded
Автор

Привет. Можешь посоветовать книги по архитектуре на unity, если такие есть. Буду очень благодарен.

andreysmirnov