12
Московский центр SPARC–технологий Анализ указателей в программах с вызовами библиотечных функций Статья: Маркин А. Л., аспирант ИНЭУМ Руководитель: Ермолицкий А. В., к.т.н., ЗАО МЦСТ

Анализ указателей в программах с вызовами библиотечных функций

Embed Size (px)

Citation preview

Page 1: Анализ указателей в программах с вызовами библиотечных функций

Московский центр SPARC–технологий

Анализ указателей в программах с вызовамибиблиотечных функций

Статья: Маркин А. Л., аспирант ИНЭУМРуководитель: Ермолицкий А. В., к.т.н., ЗАО МЦСТ

Page 2: Анализ указателей в программах с вызовами библиотечных функций

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

Пример кода

void * createObj(void){

return malloc(sizeof(int));}void destroyObj(void * obj){

free(obj);}void foo(void){

void * a = createObj(),* b = createObj();

// ...destroyObj(a);destroyObj(b);

}

Цель анализа указателейВыяснить, пересекаются лиучастки памяти, на которыеуказывают переменные.

Сложности анализауказателей

Большие затраты попамятиБольшие затраты повремениОтсутствие информации овсей программе

Анализ указателей в программах с вызовами библиотечных функций 2 / 10

Page 3: Анализ указателей в программах с вызовами библиотечных функций

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

Пример кода

void * createObj(void){

return malloc(sizeof(int));}void destroyObj(void * obj){

free(obj);}void foo(void){

void * a = createObj(),* b = createObj();

// ...destroyObj(a);destroyObj(b);

}

Цель анализа указателейВыяснить, пересекаются лиучастки памяти, на которыеуказывают переменные.

Сложности анализауказателей

Большие затраты попамятиБольшие затраты повремениОтсутствие информации овсей программе

Анализ указателей в программах с вызовами библиотечных функций 2 / 10

Page 4: Анализ указателей в программах с вызовами библиотечных функций

Модель поведения функций

Библиотечные функции — это функции, описанные в стандартеязыка или библиотеки. Обычно их работа гарантируется стандартом ине зависит от реализации.

Граф вызовов задачи 179.art

Модель библиотечных функций представляет из себя, описаниесвойств множества функций, поведение которых определеностандартом и не может быть изменено.

Анализ указателей в программах с вызовами библиотечных функций 3 / 10

Page 5: Анализ указателей в программах с вызовами библиотечных функций

Модель поведения функций

Библиотечные функции — это функции, описанные в стандартеязыка или библиотеки. Обычно их работа гарантируется стандартом ине зависит от реализации.

Граф вызовов задачи 179.art

Модель библиотечных функций представляет из себя, описаниесвойств множества функций, поведение которых определеностандартом и не может быть изменено.

Анализ указателей в программах с вызовами библиотечных функций 3 / 10

Page 6: Анализ указателей в программах с вызовами библиотечных функций

Модель поведения функций

Реализация модели библиотечных функций выполнена в видехеш-таблицы, в которой ключом является символьное имя функции, азначением — набор атрибутов.

Графическое представление реализации модели

Анализ указателей в программах с вызовами библиотечных функций 4 / 10

Page 7: Анализ указателей в программах с вызовами библиотечных функций

Модель поведения функций

Поддерживаемые свойства

Режим возврата

Наличие побочных эффектов

Выделение функцией памяти

Чтение глобальных переменных

Запись в глобальные переменные

Запись в переменную errno

Запись по аргументам-указателям

Чтение из аргументов-указателей

Использование аргументов-указателей

Вызов функции по аргументу-указателю

Возврат указателя

Принадлежность к стандартуАнализ указателей в программах с вызовами библиотечных функций 5 / 10

Page 8: Анализ указателей в программах с вызовами библиотечных функций

Экспериментальные результаты

Режимы сборкиПомодульныйВся программа (-fwhole)

Доступность реализации библиотечных функцийblack_box — режим компиляции без промежуточного кодабиблиотекfull_lib — режим компиляции с доступом ко внутреннему кодубиблиотекfast_lib — режим компиляции с использованием моделиповедения библиотечных функций.

Анализ указателей в программах с вызовами библиотечных функций 6 / 10

Page 9: Анализ указателей в программах с вызовами библиотечных функций

Компиляция SPEC-2000

Режим «Вся программа»

Замер скорости компиляции Замер потребления памяти

Коэффициент > 1 — ускорениеКоэффициент > 1 — уменьше-ние потребления памяти

Анализ указателей в программах с вызовами библиотечных функций 7 / 10

Page 10: Анализ указателей в программах с вызовами библиотечных функций

Компиляция SPEC-2006

Режим «Вся программа»

Замер скорости компиляции Замер потребления памяти

Коэффициент > 1 — ускорениеКоэффициент > 1 — уменьше-ние потребления памяти

Анализ указателей в программах с вызовами библиотечных функций 8 / 10

Page 11: Анализ указателей в программах с вызовами библиотечных функций

Исполнение SPEC-2000

Результат замеров скорости исполнения задач

Время исполнения в режиме«Вся программа»

Время исполнения в режиме по-модульной сборки

Коэффициент > 1 — ускорение

Анализ указателей в программах с вызовами библиотечных функций 9 / 10

Page 12: Анализ указателей в программах с вызовами библиотечных функций

Итоги

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

Дальнейшие направления развитияУвеличение количества подготовленных функцийАвтоматическое определение свойств пользовательских функцийМодули с описанием функций популярных библиотекПолноценная поддержка C++

Анализ указателей в программах с вызовами библиотечных функций 10 / 10