Удобная навигация по видео :) 0:00 - Начало 1:02 - Разделение памяти 1:38 - Стек 2:24 - Типы данных сохраняемые на стеке 3:40 - Куча 5:10 - Типы данных сохраняемые в куче 6:12 - Пример работы стека 7:58 - Пример совместной работы стека и кучи 10:25 - Завершение
Спасибо за видео! Небольшое уточнение относительно размещения объектов в куче: насколько я помню, на куче отдельно размещается область класса (объект), где содержатся все статичные поля, таблица виртуальных методов и тп, и отдельно - экземпляры, в которых, например, содержатся поля данных. то есть для каждого класса будет некоторая статичная область выделена, а так же области под экземпляры. На примере из видео, для класса Rocket на стеке во фрейме CreateRocket будет выделено место под ссылочную переменную, указывающую на экземпляр в куче, который в свою очередь имеет ссылку на класс (объект). Поправьте, если не прав.
Большое Спасибо!! Вы единственный человек который помог мне понять эту тему визуально,спасибо за старания! За то что показали как работает оперативная память на примерах и в визуальном образе благодарю вас! Очень жалко что такой крутой канал заброшен. Надеюсь что у автора на данный момент все хорошо спасибо за помощь!
@@codaza-channel Прочитайте в документации. Он вызывается если мы вызвали Collect, если заканчивается память или выделенная память превышает допустимый порог
Благодарю за подробное уточнение. Я перепроверил официальную документацию на сайте Microsoft, это действительно так. Оставлю ссылку на документ, на случай, если кому то из гостей канала потребуется информация из первоисточника: docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals?redirectedfrom=MSDN#conditions_for_a_garbage_collection
Большое спасибо за объяснение, очень доступно и понятно. Особенно порадовало объяснение того, что ссылочный тип находится в куче, если он часть объекта. Всегда сыпался на этом вопросе на собесах, так как было непонятно.
Спасибо за контент! Только 2 маленьких уточнения: - Стек находится не в оперативной памяти, а в реестровой памяти процессора - Гарбедж коллектор не сразу же удалит объект из кучи если на него нету больше ссылки, а когда наполниться поколение и не будет места для новых объектов (разве что принудительно вызовем GC.Collect() method)
@@misha2993 Значит везде ошибаются Стек один на поток как раз и потому, что сам поток идет от процессора и чтобы работал так же быстро и память выделяется тут же в регистре процессора
На канале, где я учусь, а именно у Alek OS, есть видео, где он говорит про стек. И по его словам, он находится в оперативной памяти Также в гугле нашёл доп. инфу про стек регистра процессора и вот то, что там на писано: Стек всегда находится в оперативной памяти. Существует указатель стека, который хранится в регистре процессора, указывающем на вершину стека, то есть на адрес местоположения в верхней части стека.
@@misha2993 там все скомкано и подано вразброс Сам СТЕК (ячейки памяти последовательности действий) находится в процессоре, а вот значения ссылочных типов - в оперативке, в стеке только ссылки на них