Upload
alex-markin
View
109
Download
1
Embed Size (px)
Citation preview
Московский центр SPARC–технологий
Анализ указателей в программах с вызовамибиблиотечных функций
Статья: Маркин А. Л., аспирант ИНЭУМРуководитель: Ермолицкий А. В., к.т.н., ЗАО МЦСТ
Анализ указателей
Пример кода
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
Анализ указателей
Пример кода
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
Модель поведения функций
Библиотечные функции — это функции, описанные в стандартеязыка или библиотеки. Обычно их работа гарантируется стандартом ине зависит от реализации.
Граф вызовов задачи 179.art
Модель библиотечных функций представляет из себя, описаниесвойств множества функций, поведение которых определеностандартом и не может быть изменено.
Анализ указателей в программах с вызовами библиотечных функций 3 / 10
Модель поведения функций
Библиотечные функции — это функции, описанные в стандартеязыка или библиотеки. Обычно их работа гарантируется стандартом ине зависит от реализации.
Граф вызовов задачи 179.art
Модель библиотечных функций представляет из себя, описаниесвойств множества функций, поведение которых определеностандартом и не может быть изменено.
Анализ указателей в программах с вызовами библиотечных функций 3 / 10
Модель поведения функций
Реализация модели библиотечных функций выполнена в видехеш-таблицы, в которой ключом является символьное имя функции, азначением — набор атрибутов.
Графическое представление реализации модели
Анализ указателей в программах с вызовами библиотечных функций 4 / 10
Модель поведения функций
Поддерживаемые свойства
Режим возврата
Наличие побочных эффектов
Выделение функцией памяти
Чтение глобальных переменных
Запись в глобальные переменные
Запись в переменную errno
Запись по аргументам-указателям
Чтение из аргументов-указателей
Использование аргументов-указателей
Вызов функции по аргументу-указателю
Возврат указателя
Принадлежность к стандартуАнализ указателей в программах с вызовами библиотечных функций 5 / 10
Экспериментальные результаты
Режимы сборкиПомодульныйВся программа (-fwhole)
Доступность реализации библиотечных функцийblack_box — режим компиляции без промежуточного кодабиблиотекfull_lib — режим компиляции с доступом ко внутреннему кодубиблиотекfast_lib — режим компиляции с использованием моделиповедения библиотечных функций.
Анализ указателей в программах с вызовами библиотечных функций 6 / 10
Компиляция SPEC-2000
Режим «Вся программа»
Замер скорости компиляции Замер потребления памяти
Коэффициент > 1 — ускорениеКоэффициент > 1 — уменьше-ние потребления памяти
Анализ указателей в программах с вызовами библиотечных функций 7 / 10
Компиляция SPEC-2006
Режим «Вся программа»
Замер скорости компиляции Замер потребления памяти
Коэффициент > 1 — ускорениеКоэффициент > 1 — уменьше-ние потребления памяти
Анализ указателей в программах с вызовами библиотечных функций 8 / 10
Исполнение SPEC-2000
Результат замеров скорости исполнения задач
Время исполнения в режиме«Вся программа»
Время исполнения в режиме по-модульной сборки
Коэффициент > 1 — ускорение
Анализ указателей в программах с вызовами библиотечных функций 9 / 10
Итоги
ВыводыРассмотрено влияние использования модели поведениябиблиотечных функций вместо анализа их кода.Использование такой модели ускоряет процесс анализа указателейРасходы по памяти с использованием таблицы атрибутовэквивалентны расходам без анализа содержимого функции изначительно меньше расходов при полном анализе содержимого
Дальнейшие направления развитияУвеличение количества подготовленных функцийАвтоматическое определение свойств пользовательских функцийМодули с описанием функций популярных библиотекПолноценная поддержка C++
Анализ указателей в программах с вызовами библиотечных функций 10 / 10