Я буду тут проти зерна і скажу, що ніколи не зарано довідатися про оптимізації, особливо про оптимізацію складання та, що ще важливіше, налагодження в зборах. Я вірю, що ви отримаєте максимальну користь від цього, якщо будете студентом (адже тоді вам дуже мало втратити [тобто мудрий час / гроші]) і все, щоб отримати.
Якщо ви перебуваєте в галузі та вам не доручено займатися складанням, тоді не робіть цього. В іншому випадку, якщо ви студент або маєте час взагалі, я знайшов би час навчитися розбирати програми і бачити, чи зможу я придумати краще рішення, ніж компілятор. Якщо я не можу, хто дбає! Я щойно навчився писати, а також компілятор, і це ВЕЛИЧИЙ плюс, коли ви стикаєтеся з помилкою в коді випуску (без символів налагодження) і дивитесь на розбирання, тому що це єдине, що ви можете подивитися.
Відповідь
Це один з найкращих ресурсів, які я знайшов для вивчення оптимізацій.
http://www.agner.org/optimize/
Тираж
Якщо ви читаєте деякі статті головних розробників (наприклад, обґрунтування створення EASTL та ретельніша перевірка коду призведе до таких коментарів, як це було зроблено, тому що GCC жахливо викладати це, якщо заява, яка скаже вам, що більшість люди говорять, що ви довіряєте компілятору не завжди правильно, ОСОБЛИВО в розробці ігор), а потім ступивши в галузь, ви побачите, що оптимізація - це повсякденна річ, і знаючи, що означає вихід збірки, це великий плюс. Крім того, люди, здається, не усвідомлюють (особливо в стакверфілі), що ігри з профілюванням дуже важкі і не завжди точні.
Однак є застереження. Ви можете витратити час на оптимізацію чогось, а згодом зрозумієте, що був витрачений час. Але чого ти навчився? Ви навчилися не повторювати ту саму помилку за подібних обставин.
Що зараз займає ТА - це, на мою думку, релігійну позицію до твердження не оптимізуйте, доки ви не профіліруєтесь і не переживайте, компілятор знає краще за вас . Це перешкоджає навчанню. Я знаю експертів у цій галузі, яким платять дуже непогані гроші (і я маю на увазі ДУЖЕ хороші гроші), щоб спіткати в зборах, щоб оптимізувати гру та налагоджувати її, тому що компілятор поганий у цьому або просто не може вам допомогти, бо, ну, це не може (збої, пов’язані з графічним процесором, збої, коли дані, які задіяні, неможливо прочитати в налагоджувальному пристрої тощо)!
Що робити, якщо хтось, хто любить це робити, ще не повністю зрозумів цього, задає тут питання і відхиляється / вимикається багатьма відповідями, які компілятор знає краще за вас! і ніколи не стає одним із тих високооплачуваних програмістів?
Одна фінальна думка. Якщо ви почнете робити це рано, ви виявите, що незабаром ви почнете писати код, який у гіршому випадку не має жодних покращень продуктивності, оскільки компілятор оптимізував його так само або в кращому випадку, має деякі покращення продуктивності, тому що зараз компілятор може оптимізувати його . В будь-якому випадку це вже стало звичкою, і ви не повільніше пишете код таким чином, ніж те, що робили раніше. Кілька прикладів є (є ще багато):
- Попередній приріст, якщо ви дійсно не хочете після збільшення
- Написання циклів для контейнерів з використанням постійної змінної локального розміру, а не виклику size () на контейнері в циклі.
EDIT: Оновлення після 8 років у цій галузі. Вивчіть складання. Дізнайтеся, як працюють оптимізатори та збірка, яку вони генерують (CompilerExplorer - чудовий інструмент для цього). Я зіткнувся з незліченною кількістю збоїв у тестових збірках (оптимізованих складах для внутрішнього тестування), де ви не можете розраховувати на відладчик навіть із символами налагодження. Компілятор оптимізував занадто багато речей, і збірка є вашим єдиним джерелом цінної інформації, щоб знайти помилку на сміттєзвалищі. Кожна збірка займає 30-40 хвилин, якщо вам пощастить і спочатку в черзі збирання - тому ви не можете розраховувати на деякі традиційні методи, щоб виділити помилку. Мультиплеєр робить все гірше. Знання збірки та прочитання оптимізованої збірки просто зробить вас кращими та в кінцевому рахунку більш цінними для команди.