Введение

В оптимизации компилятора, анализ эскаппа - это метод определения динамического диапазона указателей, где в программе может быть доступ к указателю. Это связано с анализом указателей и анализом формы. Когда переменная (или объект) выделяется в подпрограмме, указатель на переменную может выйти в другие потоки выполнения или вызывать подпрограммы. Если реализация использует оптимизацию хвостового вызова (обычно требуется для функциональных языков), объекты также могут рассматриваться как бегство в называемые подпрограммы. Если язык поддерживает первоклассные продолжения (как Scheme и Standard ML of New Jersey), части стека вызовов также могут ускользнуть. Если подпрограмма выделяет объект и возвращает ему указатель, к объекту можно получить доступ из неопределенных мест в программе, откуда указатель "убежал". Показатели также могут выйти из строя, если они хранятся в глобальных переменных или других структурах данных, которые, в свою очередь, выходят из текущей процедуры. Анализ утечки определяет все места, где может храниться указатель, и может ли быть доказано, что срок службы указателя ограничен только текущей процедурой и/или нитью.

Практические соображения

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