Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 30 апр 2024, 15:42

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: ADR и сборщик мусора
СообщениеДобавлено: 21 янв 2018, 22:53 
Не в сети

Сообщения: 350
Процедура ADR возвращает адрес переменной. Этот адрес всегда будет адресом этой переменной? Если да, то сборщик мусора не может двигать переменные (хотя бы те, у которых был взят адрес). Я правильно понимаю или нет?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: ADR и сборщик мусора
СообщениеДобавлено: 22 янв 2018, 05:51 
Не в сети

Сообщения: 108
budden писал(а):
Процедура ADR возвращает адрес переменной. Этот адрес всегда будет адресом этой переменной? Если да, то сборщик мусора не может двигать переменные (хотя бы те, у которых был взят адрес). Я правильно понимаю или нет?


Это процедура из SYSTEM. Т.е., ее поведение прибито к конкретной реализации. В ББ консерватиный GC, который никуда ничего не двигает.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: ADR и сборщик мусора
СообщениеДобавлено: 22 янв 2018, 10:56 
Не в сети
Администратор
Аватара пользователя

Сообщения: 86
Наверное, было бы неплохо иметь gc с дефрагментатором памяти. Но на практике уровнем выше ещё есть страничная виртуальная память на уровне оси. После неё особо заморачиваться с дефрагментацией памяти смысла нет.
И, надо помнить. От запуска к запуску адреса переменных плавают))

_________________
Действия профессионала предсказуемы. Но в мире полно любителей!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: ADR и сборщик мусора
СообщениеДобавлено: 22 янв 2018, 11:27 
Не в сети

Сообщения: 350
Да, я вот как раз думал недавно, что двигать память в контексте paged памяти не нужно. Хотя с другой стороны, в современных процессорах с их кешем, соседство много значит. При выделении памяти есть корреляция: если объекты выделяются почти одновременно, то они и использоваться будут, скорее всего, почти одновременно. Т.е. их имеет смысл класть рядом, и в этом смысле использование free list -ов проигрывает. Хотя для рилтайма это преимущество недоказуемо, т.к. оно носит статистический характер. Надо тебе, чтобы объекты лежали рядом - будь добр сделать это явно. И поскольку маргинальные системы умирают, как я понимаю, обычно через потерю надёжности, то важнее сохранить отлаживаемость. А отлаживаемость при подвижной памяти резко теряется. Вывод: удачно сделано в ББ.

А так вообще, в случайно взятом Обероне, я понимаю, что поведение ADR не гарантировано. Правильно?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: ADR и сборщик мусора
СообщениеДобавлено: 22 янв 2018, 18:22 
Не в сети
Администратор
Аватара пользователя

Сообщения: 86
Ну, принято говорить о последнем Обероне без специальной ремарки, или с ремаркой о ранних вариантах.
В последнем Обероне, в переводе репорта которого я тоже успел наследить вообще ничего не говорится о GC, работе с памятью и других грубых механизмах. Всё это отдано на откуп реализации. Касаться физической адресации в Оберонах -- не камильфо. Бывает, что приходится, но если в этом нет такой потребности НА САМОМ ДЕЛЕ -- работа с памятью напрямую скорее говорит о том, что программист не понял, что Оберон -- это не Си))

_________________
Действия профессионала предсказуемы. Но в мире полно любителей!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: ADR и сборщик мусора
СообщениеДобавлено: 22 янв 2018, 19:04 
Не в сети

Сообщения: 350
Ну, я ещё не совсем разобрался с системой типов Оберона, но в лиспе адрес объекта служит для построения эффективных хеш-таблиц. Думаю, что и в Обероне это может иметь смысл. В этом контексте имеет большой значение, движется он или нет. Ну и для отладки это тоже очень важно. Поскольку в языке со сборщиком мусора я не вижу надёжной защиты от того, что GC может вызваться в любой момент. Поэтому подвижный адрес - это примерно то же, что вообще никакого адреса.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: ADR и сборщик мусора
СообщениеДобавлено: 22 янв 2018, 19:44 
Не в сети

Сообщения: 108
prospero78su писал(а):
Наверное, было бы неплохо иметь gc с дефрагментатором памяти. Но на практике уровнем выше ещё есть страничная виртуальная память на уровне оси. После неё особо заморачиваться с дефрагментацией памяти смысла нет.


Дефрагминтация актуальна, как минимум, для 32-битных приложений, когда может не оказаться непрерывного участка виритуальных адресов.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: ADR и сборщик мусора
СообщениеДобавлено: 22 янв 2018, 19:53 
Не в сети

Сообщения: 350
Я так понимаю, даже если делать массив из миллиарда элементов, на уровне железа он всё равно будет разбит на страницы, поскольку ОС не умеет выделять страницу памяти размером миллиард слов. Поэтому стоит его разбить на страницы уже на уровне рантайм-среды. Мне приходилось встречаться с такой реализацией массивов, хотя она была сделана очень давно и, возможно, для другого железа, чем сейчас используется. Но есть и другие мотивы разбивать огромные объекты на более мелкие. Например, для сборщика мусора желательно помечать куски памяти, которые не изменились со времени прошлой сборки - это позволяет сэкономить что-нибудь. Если массив огромный, то есть большая вероятность, что в нём изменятся только отдельные небольшие части - тогда выигрыш от страничности может быть значительным.

Хотя надо сказать, я далёк от каких-то системных знаний в этой области.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: ADR и сборщик мусора
СообщениеДобавлено: 22 янв 2018, 20:02 
Не в сети

Сообщения: 108
prospero78su писал(а):
Ну, принято говорить о последнем Обероне без специальной ремарки, или с ремаркой о ранних вариантах.
В последнем Обероне, в переводе репорта которого я тоже успел наследить вообще ничего не говорится о GC, работе с памятью и других грубых механизмах. Всё это отдано на откуп реализации. Касаться физической адресации в Оберонах -- не камильфо. Бывает, что приходится, но если в этом нет такой потребности НА САМОМ ДЕЛЕ -- работа с памятью напрямую скорее говорит о том, что программист не понял, что Оберон -- это не Си))


Оберон без GC по безопасности падает на уровень Си. Т.е., практического смысла не имеет.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: ADR и сборщик мусора
СообщениеДобавлено: 22 янв 2018, 20:34 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
budden писал(а):
А так вообще, в случайно взятом Обероне, я понимаю, что поведение ADR не гарантировано. Правильно?
Мне не попадалась ни одна реализация Оберона, в которой сборщик мусора перемещает данные. И ни одна, которая вызывает сборщик в непредвиденный момент. Наоборот, сборщик вызывается только при очередном выделении памяти по NEW (или SYSTEM.NEW). Так что работа ADR вполне гарантирована. А иначе какой в нём смысл вообще тогда?

Проблемы же с ADR могут возникнуть при работе с полученным адресом после выгрузки модуля, данные которого были размещены по этому адресу. Впрочем, это же касается и указателей на процедуры.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club