Бём и помеченные указатели - PullRequest
2 голосов
/ 10 января 2011

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

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

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

1 Ответ

2 голосов
/ 17 января 2011

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

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

Однако он не является инкрементным или генеративным, а также не обрабатывает потоки (он недостаточно умен, чтобы останавливать потоки с сигналами). С положительной стороны, однако, он не требует магических методов связи, которые использует Бем (для захвата malloc и т. Д.). С серьезной минусовой стороны вы не можете поместить управляемые объекты в неуправляемые.

...