В інформатиці оптимізацією називається процес модифікації системи для поліпшення її ефективності. Система може бути одиночної комп'ютерною програмою. набором комп'ютерів або навіть цілою мережею, такий як Internet.
Незважаючи на те, що слово «оптимізація» використовує той же самий корінь, що й слово «оптимальний», процес оптимізації досить рідко породжує оптимальну систему, тому завжди є поступки (tradeoffs).
Оптимізація повинна проводитися з обережністю. Тоні Хоар вперше вимовив, а Дональд Кнут згодом часто повторював відомий вислів: «Передчасна оптимізація - це корінь всіх бід». Дуже важливо мати для початку озвучений алгоритм і працюючий прототип.
Деякі завдання часто можуть бути виконані більш ефективно. Наприклад, розглянемо наступну програму на мові Сі. яка підсумовує всі цілі числа від 1 до N:
Цей код може бути (маючи на увазі, що немає переповнення) переписаний, використовуючи математичну формулу, в наступному вигляді:
Термін «оптимізація» зазвичай має на увазі, що система зберігає ту ж саму функціональність. Однак, значне поліпшення продуктивності часто може бути досягнуто за допомогою вирішення нагальної проблеми і видалення надлишкової функціональності. Наприклад, якщо обґрунтовано припустити, що програмі не потрібно підтримувати більш, ніж (скажімо) 100 елементів при введенні, то можливо використовувати статичну виділення пам'яті замість повільного динамічного.
Поступки (tradeoffs)
Оптимізація в основному фокусується на одиночному або повторному часу виконання, використання пам'яті, дискового простору, пропускної здатності або деякому іншому ресурсі. Це зазвичай вимагає поступок - один параметр оптимізується за рахунок інших. Наприклад, збільшення розміру кешу покращує продуктивність часу виконання, але також збільшує споживання пам'яті. Інші поширені поступки включають прозорість коду і його виразність. Складні спеціалізовані алгоритми вимагають більше зусиль по налагодженню і збільшують ймовірність помилок.
різні області
У дослідженні операцій. оптимізація - це проблема визначення вхідних значень функції, при яких вона має максимальне або мінімальне значення. Іноді на ці значення накладаються обмеження, таке завдання відома як обмежена оптимізація.
У програмуванні. оптимізація зазвичай позначає модифікацію коду і його установок компіляції для даної архітектури для виробництва більш ефективного ПО.
Типові проблеми мають настільки велику кількість можливостей, що програмісти зазвичай можуть дозволити використовувати тільки «досить добре» рішення.
Вузькі місця
Для оптимізації потрібно знайти вузьке місце: критичну частину коду, яка є основним споживачем необхідного ресурсу. Поліпшення приблизно 20% коду тягне за собою зміну 80% результатів (див. Також принцип Парето).
Архітектурний дизайн системи особливо сильно впливає на її продуктивність. Вибір алгоритму впливає на ефективність більше, ніж будь-який інший елемент дизайну. Більш складні алгоритми і структури дані можуть добре оперувати з великою кількістю елементів, в той час як прості алгоритми підходять для невеликих обсягів даних - накладні витрати на ініціалізацію складнішого алгоритму можуть переважити вигоду від його використання.
Чим більше пам'яті використовує програма, тим швидше вона зазвичай виконується. Наприклад, програма-фільтр зазвичай читає кожен рядок, фільтрує і виводить цей рядок безпосередньо. Тому вона використовує пам'ять тільки для зберігання одного рядка, але її продуктивність зазвичай дуже погана. Продуктивність може бути значно поліпшена читанням цілого файлу і записом потім відфільтрованого результату, однак цей метод використовує більше пам'яті. Кешування результату також ефективно, проте вимагає більшої кількості пам'яті для використання.
- Оптимізація в Java
- Оптимізація в C ++
- абстрактна інтерпретація
- метрика гарності
- кешування
- принцип KISS
- Граф передачі управління
- ледачі обчислення
- Низькорівнева віртуальна машина
- Мемоізація
- околиця пам'яті
- Профілювання (аналіз продуктивності)
- теорія черг
- симулятор
- гіпотетичне виконання
- Час виконання найгіршого випадку
література
Дивитися що таке "Оптимізація коду" в інших словниках:
Оптимізація компілятора - Цю сторінку пропонується об'єднати з Оптимізуючий компілятор. Пояснення причин і обговорення на сторінці Вікіпедія: До ... Вікіпедія
Заплутування коду - Обфускація (від лат. Obfuscare затінювати, затемнювати; і англ. Obfuscate робити неочевидним, заплутаним, збивати з пантелику), або заплутування коду приведення вихідного тексту або виконуваного коду програми до виду, що зберігає її функціональність, але ... ... Вікіпедія
Видалення мертвого коду - В теорії компіляторів видаленням мертвого коду (англ. Dead code elimination, DCE) називається оптимізація, що видаляє мертвий код. Мертвим кодом (так само марним кодом) називають код, виконання якого не впливає на висновок програми, все ... ... Вікіпедія
Видалення недосяжного коду - В теорії компіляторів видаленням недосяжного коду (англ. Unreachable code elimination) називається оптимізація, що видаляє недосяжний код, тобто код, який міститься в програмі, але з якихось причин, ніколи не виконується [1]. В ... ... Вікіпедія
Межпроцедурная оптимізація - (англ. Interprocedural Optimization, IPO) або полнопрограммная оптимізація оптимізація компілятора, яка зачіпає кілька процедур, часто знаходяться в різних модулях. Таку оптимізацію можна застосувати, лише проаналізувавши ... ... Вікіпедія