Реализация сборки мусора на скомпилированных языках

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

Но как насчет JIT-компиляторов для таких языков, как Java и C #, которые поддерживают полностью распакованные целые числа машинного слова и числа с плавающей запятой? Как они узнают, какое из содержимого стека и регистров ЦП является указателями?

14
задан rwallace 17 August 2011 в 23:35
поделиться