OberonCore https://forum.oberoncore.ru/ |
|
Сборщик мусора https://forum.oberoncore.ru/viewtopic.php?f=158&t=6957 |
Страница 1 из 1 |
Автор: | JackKatch [ Вторник, 15 Август, 2023 18:31 ] |
Заголовок сообщения: | Сборщик мусора |
Неоднократно наступив на "грабли", решил задать вопрос. В книге "Проект Оберон" написано, что исходной точкой для сборки мусора являются корни динамических структур данных, т.е. глобальные переменные указатели. Но описатели типа размещаются тоже в куче и тоже имеют поле пометки для сборщика мусора. Следовательно необходимо, кроме списка глобальных указателей, выполнить обход и списка описателей типа. Я правильно понимаю? В книге нет акцента на том, что описатели типа тоже "корни структур". Иначе добраться до описателя типа невозможно, если для некоторого указателя, на некоторый тип память ещё не выделялась, а сборщик уже работает. Подскажите пожалуйста, кто в курсе дела. |
Автор: | arisu [ Среда, 16 Август, 2023 06:51 ] |
Заголовок сообщения: | Re: Сборщик мусора |
эм… если я правильно понял вопрос — нет, не в куче. это часть статических данных модуля, зачем их в кучу класть, если они всегда одни и те же? каждая запись перед полями просто имеет указатель на это описание — type tag, никто ж не копирует всё целиком при создании. память для модулей выделяется (или обрабатывается, не помню точно) отдельным кодом, и модуль никуда не денется, пока его явно не выгрузят. соответственно, и его статические данные никуда не денутся. |
Автор: | JackKatch [ Среда, 16 Август, 2023 08:57 ] |
Заголовок сообщения: | Re: Сборщик мусора |
Цитата из книги "Проект Оберон". "Подчеркнём, что память для дескрипторов типа должна выделятся в куче. Хотя они - константы, они не могут размещаться среди констант модуля в области блоков, потому что элементы кучи могут ссылаться на дескриптор типа даже после того, как определяющий этот тип модуль был выгружен.". Стр. 257 |
Автор: | arisu [ Среда, 16 Август, 2023 10:57 ] |
Заголовок сообщения: | Re: Сборщик мусора |
поэтому на практике у нас есть два варианта. точнее, три, на самом деле, но третий нам сейчас неинтересен. вариант 1: просто никогда не освобождать память, занятую модулем при его выгрузке — достаточно скрывать его из списка активных. так делает BBCB, например. вариант 2: при загрузке модуля копировать десктипторы в отдельный блок памяти — и… никогда его не освобождать, потому что цитата поясняет, почему. итого, в любом случае ключевая техника тут — «никогда не освобождать» (как оно и делается в большинстве оберонов). поэтому и сканировать тайпдески не надо. p.s.: третий вариант — полный скан при выгрузке модуля, который реализовали, кажется, в A2, и я в LC. но это совершенно отдельный сканер, который вызывается только при ручной выгрузке модуля, и заменяет стратегию «никогда не освобождать» на «освобождать только если безопасно». основную идею это не меняет: описания типов считаются персистентными и живут в специальной памяти, которую гц никогда не освобождает. |
Автор: | JackKatch [ Среда, 16 Август, 2023 13:34 ] |
Заголовок сообщения: | Re: Сборщик мусора |
Уважаемый arisu. Вы пишете, что описатель не в куче, хотя в книге чётко указано, что он именно там. У описателя есть поле пометки для сборщика мусора, что подразумевает работу с ним. Если описатели не "сканировать", на этапе пометки/разметки (не знаю как правильно сказать), то на втором этапе, освобождении неиспользуемых блоков все описатели будут утилизированы. Что недопустимо. Из ваших комментариев я делаю вывод, что вы не в теме. Я благодарен вам за желание помочь, но пожалуйста не пишите о том, в чём не разбираетесь. Очень вас прошу. Вы можете меня запутать. Тема сложная, я запутаюсь и без посторонней помощи. Надеюсь на ваше понимание. |
Автор: | arisu [ Среда, 16 Август, 2023 17:33 ] |
Заголовок сообщения: | Re: Сборщик мусора |
да, я не помню точно, как это сделано в оригинальном обероне, и говорил на основе BBCB — который корнями уходит в Oberon System 3, и ядро которого я не просто читал, но и активно модифицировал. но раз вам неинтересно, как это работает в реальной системе на практике — то ваше дело. я вас больше не потревожу. |
Автор: | Sergej Durmanov [ Суббота, 19 Август, 2023 19:11 ] |
Заголовок сообщения: | Re: Сборщик мусора |
лучше задать эти вопросы в Oberon mail list https://lists.inf.ethz.ch/mailman/listinfo/oberon |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |