Однажды вечером Крис ван Вайк (Chris Van Wyk) и я беседовали об оптимизации программ. Затем он перешел к разговору об улучшении конкретной программы на языке С. Несколько часов спустя ему удалось вдвое сократить время выполнения программы из трех тысяч строк, работавшей с графикой.
Хотя время работы программы для большинства изображений было достаточно коротким, для обработки некоторых сложных картин требовалось около десяти минут. Ван Вайк начал с профилирования программы, что позволило ему определить, на выполнение каких функций уходит больше всего времени (профиль аналогичной программы меньшего объема показан в табл. 9.1). Запуск программы на десяти типичных тестовых изображениях показал, что почти 70% времени тратилось на функцию выделения памяти malloc.
Затем ван Вайк занялся изучением подсистемы выделения памяти. Поскольку его программа вызывала malloc из единственной функции, в которой была предусмотрена проверка ошибок, он имел возможность изменять эту функцию, а не исходный код библиотечной функции malloc. Он вставил несколько добавочных строк, которые помогли выяснить, что память под запись наиболее часто используемого типа выделялась приблизительно в 30 раз чаще, чем под запись следующего по частоте использования. Если вам известно, что большую часть времени программа тратит на выделение памяти под запись какого-либо одного известного типа, как бы вы изменили эту программу, чтобы ускорить ее работу?
Опубликовал vovan666
April 17 2013 00:00:55 ·
0 Комментариев ·
3229 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.