Алгоритм Стенсгаарда


В компьютерных науках алгоритм Стенсгаарда представляет собой масштабируемый, нечувствительный к потоку алгоритм анализа указателей . Часто используется в компиляторах , благодаря своей скорости (например, реализация доступна в фреймворке компилятора LLVM ). [1] В своей первоначальной формулировке этот алгоритм был нечувствительным к полю, контексту и массиву.

Алгоритм Стенсгаарда основан на ограничениях-равенствах [ 2] , в отличие от алгоритма Андерсена , который основан на ограничениях подмножества . Это позволяет отслеживать информацию о точках с помощью структуры данных union-find . Этот выбор придает алгоритму характерную скорость; при реализации с использованием структуры данных union-find это линейное пространство и почти линейное время по размеру входной программы.

Формулировка алгоритма Бьерном Стинсгаардом была основана на выводе типов и проверке типов . Стенсгаард предложил анализ точек для небольшого императивного, но универсального языка указателей, который фиксирует основные свойства других распространенных языков с указателями, таких как C . Семантика языка и правила типизации составляют анализ.