AFAIK Boehm может справиться с этим с помощью правильных опций. Он способен за небольшую цену обнаруживать внутренние указатели. Также можно написать свой собственный код сканирования. В принципе, вероятно, достаточно хуков, чтобы справиться с чем угодно.
Я написал свой собственный сборщик, он точен в куче и консервативен в стеке. Это не касается С, сделанных указателями. Для некоторых приложений это будет быстрее, потому что он много знает о распределенных объектах моего языка и не заботится о других вещах, которые управляются, скажем, с использованием традиционных деструкторов C ++.
Однако он не является инкрементным или генеративным, а также не обрабатывает потоки (он недостаточно умен, чтобы останавливать потоки с сигналами). С положительной стороны, однако, он не требует магических методов связи, которые использует Бем (для захвата malloc и т. Д.). С серьезной минусовой стороны вы не можете поместить управляемые объекты в неуправляемые.