Анализ указателя


В компьютерных науках анализ указателей или анализ точек — это метод статического анализа кода , который устанавливает, какие указатели или ссылки кучи могут указывать на какие переменные или места хранения. Это часто является компонентом более сложных анализов, таких как анализ побега . Тесно связанным методом является анализ формы .

(Это наиболее распространенное разговорное использование термина. Во вторичном использовании анализ указателей является собирательным названием как для анализа точек на , определенного, как указано выше, так и для анализа псевдонимов . Анализ точек и псевдонимов тесно связаны, но не всегда эквивалентны. проблемы.)

Для следующего примера программы анализ точек к вычислит, что набор точек к pравен { x, y}.

Можно показать, что как форма статического анализа полностью точный анализ указателей неразрешим . [1] Большинство подходов разумны , но сильно различаются по производительности и точности. Многие проектные решения влияют как на точность, так и на производительность анализа; часто (но не всегда) более низкая точность дает более высокую производительность. Эти варианты включают: [2] [3]

Алгоритмы анализа указателей используются для преобразования собранных необработанных использований указателей (назначения одного указателя другому или назначения указателя другому) в полезный график того, на что может указывать каждый указатель. [4]

Алгоритм Стенсгаарда и алгоритм Андерсена являются распространенными нечувствительными к контексту и потоку алгоритмами для анализа указателей. Они часто используются в компиляторах и имеют реализации в кодовой базе LLVM .


Диаграмма, показывающая, как анализ указателей абстрагирует память времени выполнения.
Анализ указателей, нечувствительных к потоку, часто абстрагирует возможные выделения во время выполнения по месту их размещения. Во время выполнения эта программа создает три отдельных выделения кучи. Нечувствительный к потоку анализ указателей будет рассматривать их как единую абстрактную ячейку памяти, что приведет к потере точности.