Распределители со сжатием в памяти - PullRequest
1 голос
/ 03 июня 2011

Мне интересно, есть ли проекты / хотя бы какие-нибудь исследования по комбинации сжатия в памяти и распределителей памяти (конечно, за счет некоторой скорости)?

Например, представьте сценарий:у нас есть огромное дерево, которое мы должны обработать.Это дерево не вписывается в память.С помощью сжатия распределителя мы можем разместить практически любое дерево.

Конечно, можно использовать итерационный подход, не создавая дерево сразу, но мой вопрос чисто теоретический (на сегодняшний день).

Вероятно, для разыменования потребуются специальные макросы / шаблоны, чтобы распределитель мог распаковывать выбранные области.Но что, если один регион ссылается на другой регион и т. Д.?Должен быть какой-то очень сложный алгоритм, возможно, разрешенный только в управляемых языках (но Бём смог создать GC для C ++!)

Или, может быть, он настолько сложный / медленный (даже по сравнению с сохраненной памятью), что не 'не стоит вообще?Виртуальная память и обмен могут быть очень медленными, особенно в средах со сборкой мусора.Недавно приложение размером 1 Гбайт привело к тому, что вся ОС перестала отвечать на запросы ... Так что механизмы уровня ядра не обязательно эффективны.

Вы можете подумать об этом (я все еще пытаюсь заверить вас, что это не слишком глупо).идея) как противопоставление быстрых фьютексов пользовательского режима против медленных нативных мьютексов, быстрых зеленых потоков пользовательского режима (как в Erlang с до 20 миллионов одновременных процессов на машине) против медленных нативных потоков и т. д.

1 Ответ

0 голосов
/ 03 июня 2011

См. Случай сжатого кэширования в системах виртуальной памяти , где приведены некоторые связанные идеи, которые говорят о сжатии виртуальной памяти.Существует реализация этой идеи в Linux ( compcache ).

Мне даже не имеет смысла делать сжатие в распределителе.Задача распределителя состоит в том, чтобы вернуть количество байтов, которые я прошу выделить (и избежать фрагментации кучи и всего остального).Он не знает, какие данные я собираюсь поместить в эту память.Если память действительно ограничена, то сжатие в памяти должно выполняться приложением.

Хороший пример сжатия в памяти можно увидеть с помощью хитрых приемов Redis использует документированные здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...