Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект_укр.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.07 Mб
Скачать

Визначення кількості викликів

Як ми тільки що показали, визначення кількості викликів профілюємої крапки необхідно вже хоча б для того, щоб мі могли переконатися у вірогідності змін. До того ж, оцінювати температуру крапки можна не тільки за годиною її виконання, алеі й частоті виклику.

Наприклад, нехай у нас є дві "гарячі" крапки, у яких процесор проводити однаковий година, алеі перша з їх викликається сто разів, а друга — сто тисяч разів. Неважко догадатися, що, оптимізувавши останню хоча б на 1%, мі одержиме колосальний виграш у продуктивності, у ті година як, скоротивши година виконання першої з їх удвічі, мі прискоримо нашу програму всього лише на чверть.

Таким чином, часто викликувані функції в більшості випадків має сенс "инлайнить" (від англійського in-line), тобто  безпосередньо вставити їхній код у тіло викликуваних функцій, що заощадить якась кількість години.

Визначати кількість викликів уміють практично всі профіліровники, і отут немає ніяких проблем, що заслуговують нашої уваги.

Визначення ступеня покриття

Визначення ступеня покриття не має ніякого відношення до оптимізації додатків і це побічна функція профіліровщиков. Алі, оскільки вона все-таки є, мораль зобов'язує нас розглянути її, хоч і коротко.

Отже, покриття — це відсоток реально виконаного коду програми в процесі його профілювання. Кому потрібна така інформація? Ну, у першу чергу, тестерам — повинні ж смороду переконатися, що весь код додатка протестований цілком і в ньому не залишилося ніяких "темних" місць.

З іншого боку, оптимізуючи програму, дуже важливо знаті, які саме її частини були профільовані, а які ні. У противному випадку багатьох "гарячих" крапок можна просто не помітити тільки тому, що відповідні їм гілки програми взагалі жодного разу не одержали керування!

Розглянемо, наприклад, як може виглядати протокол покриття функцій, сгенерований profile.exe для нашого тестового приклада pswd.exe

Лістинг 1.7. Приклад протоколу покриття функцій.

program statistics ; СТАТИСТИКА ПО ПРОГРАМІ

Command line at 2002 Aug 20 03:36: pswd ; КОМАНДНИЙ РЯДОК

call depth: 2 ; ГЛИБИНА ВИКЛИКІВ: 2

total functions: 5 ; УСЬОГО ФУНКЦІЙ: 5

Function coverage: 60,0% ; ПОКРИТО ФУНКЦІЙ: 60%

 

Module Statistics for pswd.exe ; СТАТИСТИКА ПО МОДУЛІ pswd

Functions in module: 5 ; ФУНКЦІЙ У МОДУЛІ: 5

Module function coverage: 60,0% ; ФУНКЦІЙ ПРОКРЫТО: 60%

 

Covered Function ; ПОКРИТІ ФУНКЦІЇ

. _DeCrypt (pswd.obj)

. __real@4@4008fa00000000000000 (pswd.obj)

* _gen_pswd (pswd.obj)

* _main (pswd.obj)

* _print_dot (pswd.obj)

З лістингу 1.7 треба, що лише 60% функцій одержали керування, а інші 40% не були викликані жодного разу! Розумно переконатися: а чи викликаються ці функції коли не будь взагалі або являють собою "мертвий" код, якому можна безболісно видалити із програми, практично на половину зменшивши її в розмірах?

Якщо ж ці функції при якихось певних обставинах все-таки одержують керування, нам необхідно проаналізувати вихідний код, щоб розібратися: що ж це за обставини й відтворити їх, щоб профіліровщик зміг пройти й інші ділянки програми. Імена покритих і непокритих функцій перераховані в секції Covered Function. Покриті відзначаються знаком "*", а непокриті — "."

Взагалі ж, для визначення ступеня покриття існує безліч додатків (наприклад, NuMega Code Coverage), споконвічно спрямованих на рішення саме цього завдання й зі своєю роботою смороду справляються набагато краще будь-якого профіліровщика.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]