OberonCore https://forum.oberoncore.ru/ |
|
дублирования модуля в системном списке после перезагрузки https://forum.oberoncore.ru/viewtopic.php?f=2&t=5717 |
Страница 1 из 1 |
Автор: | Info21 [ Пятница, 27 Май, 2016 14:30 ] |
Заголовок сообщения: | дублирования модуля в системном списке после перезагрузки |
Пытаюсь напечатать список модулей по Meta ConnectToMods или Kernel.modList. Свой модулёк почему-то появляется там многократно -- по количеству перезагрузок. Если кто-то может быстро объяснить -- буду благодарен. |
Автор: | Пётр Кушнир [ Пятница, 27 Май, 2016 16:46 ] |
Заголовок сообщения: | Re: дублирования модуля в системном списке после перезагрузк |
Какая-то часть модуля, кажется, отвечающая за типы, остаётся в памяти после выгрузки, на случай если где-то остались ссылки на объекты из выгруженного модуля, уже обсуждали на форуме кажется. |
Автор: | Илья Ермаков [ Пятница, 27 Май, 2016 19:38 ] |
Заголовок сообщения: | Re: дублирования модуля в системном списке после перезагрузк |
Да, именно так. У выгруженных там refcnt < 0 (-1). |
Автор: | Info21 [ Пятница, 27 Май, 2016 20:28 ] |
Заголовок сообщения: | Re: дублирования модуля в системном списке после перезагрузк |
Для эксперименту прижал Кртл-Ф9 и дождался до тысячи. По-моему, это какая-то хрень. Никаких объектов на куче мой модулёк не создаёт. А предположим, для целей какой-нибудь числовой молотилки модуль кил на 10 генерится автоматически, компилируется и перезагружается, раз в минуту, сто тысяч раз. И? Понятно, что мы тут народ не слабонервный и в залезть в Кернел не замедлим. Но интересует принципиальная сторона. |
Автор: | Илья Ермаков [ Суббота, 28 Май, 2016 12:05 ] |
Заголовок сообщения: | Re: дублирования модуля в системном списке после перезагрузк |
Не, обьектов на куче-то Вы не создаёте, а принцип действия выгрузки единый всё равно: оставить секцию с дескрипторами типов в памяти. Так что, если идёт интенсивная перезагрузка (не просто hot-update, а именно генерационное программирование в рантайме, неограниченнократное), то нужно переделывать эту логику. В принципиальном плане... Разрешить полную выгрузку модуля, где нет POINTER TO-типов - безболезненная вещь. Самое общее решение, видимо, - запуск GC перед выгрузкой (а так и происходит, кажется) - и GC должен подтвердить факт отсутствия объектов типов модуля. Или принудительно обнулить POINTER-ы на такие типы. |
Автор: | Илья Ермаков [ Суббота, 28 Май, 2016 12:14 ] |
Заголовок сообщения: | Re: дублирования модуля в системном списке после перезагрузк |
(Кстати, внезапное осознание, что при динамическом связывании загруженного модуля в маш. коде, видимо, настраиваются также все конструкции IS, WITH, приведение типов - в маш. код подставляются адреса дескрипторов, с которыми сравнивать.) |
Автор: | Info21 [ Понедельник, 29 Май, 2017 18:17 ] |
Заголовок сообщения: | Re: дублирования модуля в системном списке после перезагрузк |
Кстати, где настраиваются эти IS -- разве не в модулях, которые импортируют выгружаемый? |
Автор: | Илья Ермаков [ Понедельник, 29 Май, 2017 18:25 ] |
Заголовок сообщения: | Re: дублирования модуля в системном списке после перезагрузк |
Ну да. в тех модулях, которые импортируют тип выгружаемого модуля и с ним сравнивают. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |