Вопрос

Tagged Picketers - это общая оптимизация при реализации динамических языков: воспользоваться преимуществами требований выравнивания, которые означают, что низкие два или три бита указателя всегда будут нулевыми, и использовать их для хранения информации о типе.

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

Это ShowStopper, т.е. вам приходится указывать на меткие указатели, если вы используете Boehm? Или у него есть путь вокруг этой проблемы?

Это было полезно?

Решение

AFAIK BoeMM может справиться с правильными вариантами. Он способен, по небольшой цене, обнаружении внутренних указателей. Также можно написать свой собственный код сканирования. В основном, вероятно, достаточно крючков, чтобы справиться с чем-либо.

Я написал свой собственный коллектор, то есть в куче и консервативно на стеке. Он не касается указателей C сделал. Для некоторых приложений будет быстрее, потому что он много знает о своих выделенных объектах языка и не заботится о других материалах, которые управляются, говорят, используя традиционные деструкторы C ++.

Однако это не инкрементно или генерирует, и он также не обрабатывает нити (это не достаточно умно, чтобы остановить нити с сигналами). На стороне плюса, однако, это не требует методов Magic Lingage, который делает Boehm (для захвата Mallocs и т. Д.). На серьезной минусе вы не можете поставить управляемые объекты в неуправляемые.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top