SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
Московский центр 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

Contenu connexe

Tendances

Увеличиваем мощь фреймворка Kdt & code`s generator
Увеличиваем мощь фреймворка   Kdt & code`s generatorУвеличиваем мощь фреймворка   Kdt & code`s generator
Увеличиваем мощь фреймворка Kdt & code`s generatorSQALab
 
Нагрузочное тестирование с помощью Locust.io
Нагрузочное тестирование с помощью Locust.ioНагрузочное тестирование с помощью Locust.io
Нагрузочное тестирование с помощью Locust.ioAlexey Strelkov
 
Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Alexandr Nox
 
ИРБИС: Редактирование конвертора Rusm-Irbis
ИРБИС: Редактирование конвертора Rusm-IrbisИРБИС: Редактирование конвертора Rusm-Irbis
ИРБИС: Редактирование конвертора Rusm-IrbisSoldatova Oksana
 
1 Презентация функциональное программирование
1 Презентация функциональное программирование1 Презентация функциональное программирование
1 Презентация функциональное программированиеSTEP Computer Academy (Zaporozhye)
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularitiesmcroitor
 

Tendances (9)

Увеличиваем мощь фреймворка Kdt & code`s generator
Увеличиваем мощь фреймворка   Kdt & code`s generatorУвеличиваем мощь фреймворка   Kdt & code`s generator
Увеличиваем мощь фреймворка Kdt & code`s generator
 
Нагрузочное тестирование с помощью Locust.io
Нагрузочное тестирование с помощью Locust.ioНагрузочное тестирование с помощью Locust.io
Нагрузочное тестирование с помощью Locust.io
 
Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.Недостатки Linux API с точки зрения разработчика веб-сервера.
Недостатки Linux API с точки зрения разработчика веб-сервера.
 
ИРБИС: Редактирование конвертора Rusm-Irbis
ИРБИС: Редактирование конвертора Rusm-IrbisИРБИС: Редактирование конвертора Rusm-Irbis
ИРБИС: Редактирование конвертора Rusm-Irbis
 
Obj c
Obj cObj c
Obj c
 
file handling in c++
file handling in c++file handling in c++
file handling in c++
 
1 Презентация функциональное программирование
1 Презентация функциональное программирование1 Презентация функциональное программирование
1 Презентация функциональное программирование
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularities
 
бегун
бегунбегун
бегун
 

En vedette

เฉลย O net 49 สังคม
เฉลย O net 49 สังคมเฉลย O net 49 สังคม
เฉลย O net 49 สังคมPhoPhung TaTo
 
He student profiles in 2014 15 prospectus page-12
He student profiles in 2014 15 prospectus page-12He student profiles in 2014 15 prospectus page-12
He student profiles in 2014 15 prospectus page-12bwcelearning
 
1654 p3-p psp-teknika kapal niaga
1654 p3-p psp-teknika kapal niaga1654 p3-p psp-teknika kapal niaga
1654 p3-p psp-teknika kapal niagaWinarto Winartoap
 
G latihan penulisan012bhg-a
G latihan penulisan012bhg-aG latihan penulisan012bhg-a
G latihan penulisan012bhg-aKhasiah Jaafar
 
He student profiles in 2014 15 prospectus page-05
He student profiles in 2014 15 prospectus page-05He student profiles in 2014 15 prospectus page-05
He student profiles in 2014 15 prospectus page-05bwcelearning
 
Magic lamp kel. 1 dion
Magic lamp   kel. 1 dionMagic lamp   kel. 1 dion
Magic lamp kel. 1 dionRadendion7
 
6027 p1-p psp-perbankan-contoh
6027 p1-p psp-perbankan-contoh6027 p1-p psp-perbankan-contoh
6027 p1-p psp-perbankan-contohWinarto Winartoap
 
4134 p2-spk-seni tari jawatimuran
4134 p2-spk-seni tari jawatimuran4134 p2-spk-seni tari jawatimuran
4134 p2-spk-seni tari jawatimuranWinarto Winartoap
 
Listado de la lonchera nutritiva
Listado de la lonchera nutritivaListado de la lonchera nutritiva
Listado de la lonchera nutritivayolanda gomez
 

En vedette (16)

เฉลย O net 49 สังคม
เฉลย O net 49 สังคมเฉลย O net 49 สังคม
เฉลย O net 49 สังคม
 
4036 p2-p psp-seni patung
4036 p2-p psp-seni patung4036 p2-p psp-seni patung
4036 p2-p psp-seni patung
 
The future is on
The future is onThe future is on
The future is on
 
4036 p1-spk-seni patung
4036 p1-spk-seni patung4036 p1-spk-seni patung
4036 p1-spk-seni patung
 
He student profiles in 2014 15 prospectus page-12
He student profiles in 2014 15 prospectus page-12He student profiles in 2014 15 prospectus page-12
He student profiles in 2014 15 prospectus page-12
 
2089 p2-p psp-multimedia
2089 p2-p psp-multimedia2089 p2-p psp-multimedia
2089 p2-p psp-multimedia
 
4036 p3-spk-seni patung-1
4036 p3-spk-seni patung-14036 p3-spk-seni patung-1
4036 p3-spk-seni patung-1
 
1654 p3-p psp-teknika kapal niaga
1654 p3-p psp-teknika kapal niaga1654 p3-p psp-teknika kapal niaga
1654 p3-p psp-teknika kapal niaga
 
G latihan penulisan012bhg-a
G latihan penulisan012bhg-aG latihan penulisan012bhg-a
G latihan penulisan012bhg-a
 
He student profiles in 2014 15 prospectus page-05
He student profiles in 2014 15 prospectus page-05He student profiles in 2014 15 prospectus page-05
He student profiles in 2014 15 prospectus page-05
 
Glasvezel#1
Glasvezel#1Glasvezel#1
Glasvezel#1
 
Magic lamp kel. 1 dion
Magic lamp   kel. 1 dionMagic lamp   kel. 1 dion
Magic lamp kel. 1 dion
 
6027 p1-p psp-perbankan-contoh
6027 p1-p psp-perbankan-contoh6027 p1-p psp-perbankan-contoh
6027 p1-p psp-perbankan-contoh
 
4134 p2-spk-seni tari jawatimuran
4134 p2-spk-seni tari jawatimuran4134 p2-spk-seni tari jawatimuran
4134 p2-spk-seni tari jawatimuran
 
Listado de la lonchera nutritiva
Listado de la lonchera nutritivaListado de la lonchera nutritiva
Listado de la lonchera nutritiva
 
2089 p4-p psp-multimedia
2089 p4-p psp-multimedia2089 p4-p psp-multimedia
2089 p4-p psp-multimedia
 

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

Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Sergey Platonov
 
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOPВнедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOPAlexander Lisachenko
 
Разработка веб-сервисов осень 2013 лекция 8
Разработка веб-сервисов осень 2013 лекция 8Разработка веб-сервисов осень 2013 лекция 8
Разработка веб-сервисов осень 2013 лекция 8Technopark
 
презентация конспекта лекций
презентация конспекта лекцийпрезентация конспекта лекций
презентация конспекта лекцийstudent_kai
 
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?sqadays8
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикIT61
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7Technopark
 
Sqadays 8-barancev
Sqadays 8-barancevSqadays 8-barancev
Sqadays 8-barancevAlexei Lupan
 
Caché Native Access. InterSystems Meetup 2014
Caché Native Access. InterSystems  Meetup 2014Caché Native Access. InterSystems  Meetup 2014
Caché Native Access. InterSystems Meetup 2014InterSystems
 
По ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsПо ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsSergey Schetinin
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
 
массивы Php
массивы Phpмассивы Php
массивы PhpVasya Petrov
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9Technopark
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 
Виталий Каторгин, Wamba
Виталий Каторгин, WambaВиталий Каторгин, Wamba
Виталий Каторгин, WambaOntico
 
Predzazhita 2009 v16
Predzazhita 2009 v16Predzazhita 2009 v16
Predzazhita 2009 v16guest1ba51d
 

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

Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOPВнедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
 
Разработка веб-сервисов осень 2013 лекция 8
Разработка веб-сервисов осень 2013 лекция 8Разработка веб-сервисов осень 2013 лекция 8
Разработка веб-сервисов осень 2013 лекция 8
 
презентация конспекта лекций
презентация конспекта лекцийпрезентация конспекта лекций
презентация конспекта лекций
 
Интегрированная среда разработки для функционального языка Refal
Интегрированная среда разработки для функционального языка RefalИнтегрированная среда разработки для функционального языка Refal
Интегрированная среда разработки для функционального языка Refal
 
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
 
Sqadays 8-barancev
Sqadays 8-barancevSqadays 8-barancev
Sqadays 8-barancev
 
Caché Native Access. InterSystems Meetup 2014
Caché Native Access. InterSystems  Meetup 2014Caché Native Access. InterSystems  Meetup 2014
Caché Native Access. InterSystems Meetup 2014
 
Java 2 - Java Intro
Java 2 - Java IntroJava 2 - Java Intro
Java 2 - Java Intro
 
По ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsПо ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocols
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
массивы Php
массивы Phpмассивы Php
массивы Php
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
Виталий Каторгин, Wamba
Виталий Каторгин, WambaВиталий Каторгин, Wamba
Виталий Каторгин, Wamba
 
бегун
бегунбегун
бегун
 
Predzazhita 2009 v16
Predzazhita 2009 v16Predzazhita 2009 v16
Predzazhita 2009 v16
 

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

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