Анализ указателя - Pointer analysis

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

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

Пример

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

int Икс;int у;int* п = неизвестный() ? &Икс : &у;

Вступление

Методы различаются по производительности и точности. Для больших программ могут потребоваться некоторые компромиссы, чтобы завершить анализ в разумные сроки и в разумные сроки. Два примера этих компромиссов:[1]

  • Обработка всех ссылок от структурированного объекта как от объекта в целом. Это известно как нечувствительность к полю или же структурная нечувствительность.
  • Игнорирование потока управления при анализе того, какие объекты назначены указателям. Это известно как контекстно-нечувствительный анализ указателя (при игнорировании контекста, в котором выполняются вызовы функций) или анализ указателя без учета потока (при игнорировании потока управления внутри процедуры).

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

Алгоритмы

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

Два основных алгоритма: Алгоритм стенсгаарда и Алгоритм Андерсена.

Рекомендации

  1. ^ Барбара Г. Райдер (2003). «Измерения точности справочного анализа объектно-ориентированных языков программирования». Конструирование компиляторов, 12-я Международная конференция, CC 2003, проведенная в рамках совместных европейских конференций по теории и практике программного обеспечения, ETAPS 2003 Варшава, Польша, 7–11 апреля 2003 г. Материалы. С. 126–137. Дои:10.1007/3-540-36579-6_10.
  2. ^ Зырянов, Влас; Newman, Christian D .; Guarnera, Drew T .; Collard, Michael L .; Малетик, Джонатан И. (2019). «srcPtr: платформа для реализации подходов к анализу статических указателей» (PDF). ICPC '19: Материалы 27-й Международной конференции IEEE по пониманию программ. Монреаль, Канада: IEEE.

Библиография