| Автор |
Сообщение |
|
|
| |
Заголовок сообщения: |
Re: Сборка мусора на Форте |
 |
|
|
Не знаю, может быть будет кому-то полезна эта идея.
Как работает сборщик: 1. Указатель на хип всегда помещается на стек возвратов. 2. Указатель на хип и указатель на ячейку в стеке возвратов, где хранится указатель на хип (*heap, **heap), передаются в поток. 3. Если указатель пропадает из выделенной ячейки на стеке возвратов, то поток освобождает память.
Я реализовал у себя для теста. Вполне рабочая схема. Можно чуть поменять условия. Например, память освобождается если указателя на хип нет среди стека данных и стека возвратов. Тем будет гибче и менее железобетонней.
Не знаю, может быть будет кому-то полезна эта идея.
Как работает сборщик: 1. Указатель на хип всегда помещается на стек возвратов. 2. Указатель на хип и указатель на ячейку в стеке возвратов, где хранится указатель на хип (*heap, **heap), передаются в поток. 3. Если указатель пропадает из выделенной ячейки на стеке возвратов, то поток освобождает память.
Я реализовал у себя для теста. Вполне рабочая схема. Можно чуть поменять условия. Например, память освобождается если указателя на хип нет среди стека данных и стека возвратов. Тем будет гибче и менее железобетонней.
|
|
|
 |
Добавлено: Пн июн 23, 2025 12:51 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
yz писал(а): profiT писал(а): Замечание 4: я никогда до этого момента не встречался с и не изучал алгоритмы сборки мусора. Хотя, примерное моё представление о том как это делается совпало с реализованным здесь mark and sweep.
Сейчас простой mark & sweep считается уже устаревшим. Обычно делается вариация на тему "трех цветов". Хороший обзор есть в Википедии. Это не для критики, а в порядке обмена опытом.
Спасибо за информацию об алгоритме Дейкстры! Вобще говоря, ни один из алгоритмов gc не может являться панацеей. Сперва нужно исследовать, в каких конкретных условиях он будет использоваться. Например, готовы ли мы смириться с тем, что каждое обращение к распределителю памяти повлечет за собой некоторые накладные расходы, какая степень интерактивности всей системы нас бы устроила... и тд. Стековая модель Форта вобще располагает к нетрививальным решениям в этой области(см. home(dot)pipeline(dot)com/~hbaker1/ForthStack.html). На мой взгляд, тут есть еще пространство для исследований.
Кстати говоря, я оформил свою работу в виде статьи. Сборщик мусора в ней средство, а не цель, по этому выбран был самый простой и надежный вариант.
storage9(dot)myopera(dot)com/true-grue/files/forth-fp.html
Буду рад отзывам!
[quote="yz"][quote="profiT"] Замечание 4: я никогда до этого момента не встречался с и не изучал алгоритмы сборки мусора. Хотя, примерное моё представление о том как это делается совпало с реализованным здесь mark and sweep. [/quote] Сейчас простой mark & sweep считается уже устаревшим. Обычно делается вариация на тему "трех цветов". Хороший обзор есть в Википедии.
Это не для критики, а в порядке обмена опытом.[/quote]
Спасибо за информацию об алгоритме Дейкстры! Вобще говоря, ни один из алгоритмов gc не может являться панацеей. Сперва нужно исследовать, в каких конкретных условиях он будет использоваться. Например, готовы ли мы смириться с тем, что каждое обращение к распределителю памяти повлечет за собой некоторые накладные расходы, какая степень интерактивности всей системы нас бы устроила... и тд. Стековая модель Форта вобще располагает к нетрививальным решениям в этой области(см. home(dot)pipeline(dot)com/~hbaker1/ForthStack.html). На мой взгляд, тут есть еще пространство для исследований.
Кстати говоря, я оформил свою работу в виде статьи. Сборщик мусора в ней средство, а не цель, по этому выбран был самый простой и надежный вариант.
storage9(dot)myopera(dot)com/true-grue/files/forth-fp.html
Буду рад отзывам!
|
|
|
 |
Добавлено: Пт июл 27, 2007 20:06 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
profiT писал(а): Quod Erat Demonstrandum. Так и есть -- мечу бисер. Я понимаю что у каждого своя реальность, но конкретно это вот был не я, а голем составленный из полнейшего непонимания и искажения практически любых сказанных слов.
да нет, просто речь шла о другом - что не стоит выкладывать код, в котором надо разбираться  потому как толку от такого нету никакого.
Ведь код приведен для иллюстрации реализации идеи, а не для того, чтобы в нем РАЗБИРАЛИСЬ серьезно - не так ли?
[quote="profiT"]Quod Erat Demonstrandum. Так и есть -- мечу бисер. Я понимаю что у каждого своя реальность, но конкретно это вот был не я, а голем составленный из полнейшего непонимания и искажения практически любых сказанных слов.[/quote]
да нет, просто речь шла о другом - что не стоит выкладывать код, в котором надо разбираться 8) потому как толку от такого нету никакого.
Ведь код приведен для иллюстрации реализации идеи, а не для того, чтобы в нем РАЗБИРАЛИСЬ серьезно - не так ли?
|
|
|
 |
Добавлено: Пн июл 09, 2007 21:32 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
profiT писал(а): Замечание 4: я никогда до этого момента не встречался с и не изучал алгоритмы сборки мусора. Хотя, примерное моё представление о том как это делается совпало с реализованным здесь mark and sweep.
Сейчас простой mark & sweep считается уже устаревшим. Обычно делается вариация на тему "трех цветов". Хороший обзор есть в Википедии.
Это не для критики, а в порядке обмена опытом.
[quote="profiT"] Замечание 4: я никогда до этого момента не встречался с и не изучал алгоритмы сборки мусора. Хотя, примерное моё представление о том как это делается совпало с реализованным здесь mark and sweep. [/quote]
Сейчас простой mark & sweep считается уже устаревшим. Обычно делается вариация на тему "трех цветов". Хороший обзор есть в Википедии.
Это не для критики, а в порядке обмена опытом.
|
|
|
 |
Добавлено: Пн июл 09, 2007 21:26 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
|
|
|
 |
Добавлено: Пн июл 09, 2007 20:51 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
profiT писал(а): Предскриптум. Ох, такое ощущение что я тут бисер мечу. да нет, просто почему-то твои высказывания черезчур в последнее время категоричны 8( profiT писал(а): Если 5Кб, да ещё в условиях дефицита другого осмысленного материала в теме (кроме первых ссылок вначале) -- это "много", то я тогда не знаю.
Разбирать программу на форте как всегда надо с конца, с главной процедуры (если есть она) или с примеров использования. В данном случае примеры -- есть (есть!..), смотрим их:
тут главное слово разбирать программу надо!
Интересно, что ты сам не так давно говорил другое - что в либах разбираться не надо, а надо просто ими пользоваться
но дело даже не в этом, нету ни одной строчки с пояснением, что же это такое и как этим пользоваться в самой либе.
нету ни одного коментария ни к одному слову 8(
А 5кб текста для форта не так уж и мало, кстати, текст не открывается сейчас!?
[quote="profiT"]Предскриптум. Ох, такое ощущение что я тут бисер мечу.[/quote] да нет, просто почему-то твои высказывания черезчур в последнее время категоричны 8(
[quote="profiT"]Если 5Кб, да ещё в условиях дефицита другого осмысленного материала в теме (кроме первых ссылок вначале) -- это "много", то я тогда не знаю.
Разбирать программу на форте как всегда надо с конца, с главной процедуры (если есть она) или с примеров использования. В данном случае примеры -- есть (есть!..), смотрим их:[/quote]
тут главное слово разбирать программу надо!
Интересно, что ты сам не так давно говорил другое - что в либах разбираться не надо, а надо просто ими пользоваться 8)
но дело даже не в этом, нету ни одной строчки с пояснением, что же это такое и как этим пользоваться в самой либе.
нету ни одного коментария ни к одному слову 8(
А 5кб текста для форта не так уж и мало, кстати, текст не открывается сейчас!?
|
|
|
 |
Добавлено: Пн июл 09, 2007 20:36 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
|
|
|
 |
Добавлено: Пн июл 09, 2007 10:56 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
yz писал(а): Это списки а ля Лисп со специализированным сборщиком мусора.
прекрасно, но все-таки не хватает ни коментариев, ни примеров применения, ни описания.
Толку от выкладывания такого кода очень мало 8( в нем надобно копаться, чтобы разобраться. То есть он применим только для того, кто его писал.
[quote="yz"]Это списки а ля Лисп со специализированным сборщиком мусора.[/quote]
прекрасно, но все-таки не хватает ни коментариев, ни примеров применения, ни описания.
Толку от выкладывания такого кода очень мало 8( в нем надобно копаться, чтобы разобраться. То есть он применим только для того, кто его писал.
|
|
|
 |
Добавлено: Вс июл 08, 2007 21:20 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
mOleg писал(а): Очень интересно - а что это такое? Ни тебе для чего, ни тебе как?
Это списки а ля Лисп со специализированным сборщиком мусора.
[quote="mOleg"] Очень интересно - а что это такое? Ни тебе для чего, ни тебе как?[/quote]
Это списки а ля Лисп со специализированным сборщиком мусора.
|
|
|
 |
Добавлено: Вс июл 08, 2007 21:15 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
вообще приводить такой код в качестве аргумента совсем не корректно. Собственно вообще бесполезно 8(
вопрос писал(а): названия функций - лисповые cdr car а зачем нужно - не пойму
в том-то и дело, толку от куска кода совсем нету. Понять что-то можно, но для этого нужно разбираться, причем достаточно долго, так как объем достаточно не маленький. Название s-expressions ничего не говорит 8(
вообще приводить такой код в качестве аргумента совсем не корректно. Собственно вообще бесполезно 8(
[quote="вопрос"]названия функций - лисповые cdr car а зачем нужно - не пойму [/quote]
в том-то и дело, толку от куска кода совсем нету. Понять что-то можно, но для этого нужно разбираться, причем достаточно долго, так как объем достаточно не маленький. Название s-expressions ничего не говорит 8(
|
|
|
 |
Добавлено: Вс июл 08, 2007 18:55 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
названия функций - лисповые
cdr car
а зачем нужно - не пойму
то функции работы с "надстраиваемыми" списками, т.е. списками, где "добавляется" В ГОЛОВУ ПО ЭЛЕМЕНТУ, А всё остальное - хвост 
названия функций - лисповые
cdr car
а зачем нужно - не пойму
то функции работы с "надстраиваемыми" списками, т.е. списками, где "добавляется" В ГОЛОВУ ПО ЭЛЕМЕНТУ, А всё остальное - хвост :o
|
|
|
 |
Добавлено: Вс июл 08, 2007 18:25 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
profiT писал(а):
Очень интересно - а что это такое?
Ни тебе для чего, ни тебе как?
[quote="profiT"]Пристыжаю бредоносцев: http://files.myopera.com/true-grue/files/s-expr.f[/quote]
Очень интересно - а что это такое?
Ни тебе для чего, ни тебе как?
|
|
|
 |
Добавлено: Вс июл 08, 2007 17:26 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
|
|
|
 |
Добавлено: Вс июл 08, 2007 13:03 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
WingLion писал(а): /me думает, что на 256 выравнивание может быть полезно, если надо синхронизироваться с работой SD-RAM, читаемой страницами. не верно, там выравнивание на 4кб  то есть на размер страницы chess писал(а): Может скажешь почему выравнивание делается на 16 байт, а не на восемь. В архитектуре IA-32 за одно обращение к памяти процессор читает 8 байт, так как адрес у памяти там 36-разрядный, а процессор имеет только 33-разрядную шину адреса. Младшие три бита на адресной шине памяти имеют нулевое значение. То есть выравнивать можно и на 8-байт.
Проверил: в init.f вместо 16 ALIGN-BYTES ! сделал 8 ALIGN-BYTES !. Пересобрал СПФ. Проверил быстродействие на тестовых программах - ничего не изменилось. Словарные статьи стали соответственно более компактными. вполне возможно, просто где-то я читал, что советуют циклы выравнивать именно на 16 байт (где уже не скажу, так как сей вопрос меня не волновал и запомнилось походя). Вероятно цикл может начинаться с начала определения  а вообще лучше спросить у создателя СПФ или у Михаила - уж при создании оптимизатора ему наверняка приходилось с этим вопросом сталкиваться. yz писал(а): Я уже давно заметил, что чем ничтожнее вопрос, тем более жаркие споры он вызывает. Это живо напоминает законы Паркинсона: http://www.lib.ru/DPEOPLE/PARKINSON/parklaws.txt, раздел
что очень даже логично  на самом то деле.
но тут, все-таки другое.
[quote="WingLion"]/me думает, что на 256 выравнивание может быть полезно, если надо синхронизироваться с работой SD-RAM, читаемой страницами.[/quote] не верно, там выравнивание на 4кб 8) то есть на размер страницы
[quote="chess"]Может скажешь почему выравнивание делается на 16 байт, а не на восемь. В архитектуре IA-32 за одно обращение к памяти процессор читает 8 байт, так как адрес у памяти там 36-разрядный, а процессор имеет только 33-разрядную шину адреса. Младшие три бита на адресной шине памяти имеют нулевое значение. То есть выравнивать можно и на 8-байт.
Проверил: в init.f вместо 16 ALIGN-BYTES ! сделал 8 ALIGN-BYTES !. Пересобрал СПФ. Проверил быстродействие на тестовых программах - ничего не изменилось. Словарные статьи стали соответственно более компактными.[/quote] вполне возможно, просто где-то я читал, что советуют циклы выравнивать именно на 16 байт (где уже не скажу, так как сей вопрос меня не волновал и запомнилось походя). Вероятно цикл может начинаться с начала определения 8) а вообще лучше спросить у создателя СПФ или у Михаила - уж при создании оптимизатора ему наверняка приходилось с этим вопросом сталкиваться.
[quote="yz"]Я уже давно заметил, что чем ничтожнее вопрос, тем более жаркие споры он вызывает. Это живо напоминает законы Паркинсона: http://www.lib.ru/DPEOPLE/PARKINSON/parklaws.txt, раздел[/quote]
что очень даже логично 8) на самом то деле.
но тут, все-таки другое.
|
|
|
 |
Добавлено: Пт июл 06, 2007 23:31 |
|
|
 |
|
|
| |
Заголовок сообщения: |
|
 |
|
profiT писал(а): Товарищи, вы что, все, издеваетесь?..
Я уже давно заметил, что чем ничтожнее вопрос, тем более жаркие споры он вызывает. Это живо напоминает законы Паркинсона: http://www.lib.ru/DPEOPLE/PARKINSON/parklaws.txt, раздел
"ВЫСОКАЯ ФИНАНСОВАЯ ПОЛИТИКА, или Точка безразличия"
[quote="profiT"]Товарищи, вы что, все, издеваетесь?..[/quote]
Я уже давно заметил, что чем ничтожнее вопрос, тем более жаркие споры он вызывает. Это живо напоминает законы Паркинсона: http://www.lib.ru/DPEOPLE/PARKINSON/parklaws.txt, раздел
"ВЫСОКАЯ ФИНАНСОВАЯ ПОЛИТИКА, или Точка безразличия"
|
|
|
 |
Добавлено: Пт июл 06, 2007 11:15 |
|
|
 |
|