Бёхм и помеченные указатели
-
09-10-2019 - |
Вопрос
Tagged Picketers - это общая оптимизация при реализации динамических языков: воспользоваться преимуществами требований выравнивания, которые означают, что низкие два или три бита указателя всегда будут нулевыми, и использовать их для хранения информации о типе.
Предположим, вы используете сборщик мусора Boehm, который в основном работает, глядя на активные данные для вещей, которые выглядят как указатели. Помеченные указатели не похожи на указатели, в том смысле, что их низкие биты ненулевые.
Это ShowStopper, т.е. вам приходится указывать на меткие указатели, если вы используете Boehm? Или у него есть путь вокруг этой проблемы?
Решение
AFAIK BoeMM может справиться с правильными вариантами. Он способен, по небольшой цене, обнаружении внутренних указателей. Также можно написать свой собственный код сканирования. В основном, вероятно, достаточно крючков, чтобы справиться с чем-либо.
Я написал свой собственный коллектор, то есть в куче и консервативно на стеке. Он не касается указателей C сделал. Для некоторых приложений будет быстрее, потому что он много знает о своих выделенных объектах языка и не заботится о других материалах, которые управляются, говорят, используя традиционные деструкторы C ++.
Однако это не инкрементно или генерирует, и он также не обрабатывает нити (это не достаточно умно, чтобы остановить нити с сигналами). На стороне плюса, однако, это не требует методов Magic Lingage, который делает Boehm (для захвата Mallocs и т. Д.). На серьезной минусе вы не можете поставить управляемые объекты в неуправляемые.