Здесь я буду против, и скажу, что никогда не рано узнавать об оптимизации, особенно об сборочных оптимизациях и, что более важно, об отладке в сборке. Я верю, что вы получите максимальную выгоду от этого, если будете студентом (потому что тогда вам будет очень мало терять (т. Е. Время / деньги)) и все, что можно получить.
Если вы работаете в отрасли и вам не нужно возиться с сборкой, то не делайте этого. В противном случае, если вы студент или у вас есть время в целом, я бы нашел время, чтобы научиться разбирать программы и посмотреть, смогу ли я найти лучшее решение, чем компилятор. Если я не могу, кого это волнует! Я только что научился писать так же хорошо, как и компилятор, и это ОГРОМНЫЙ плюс, когда вы столкнулись с ошибкой в коде релиза (без символов отладки) и смотрели на разборку, потому что это единственное, на что вы можете посмотреть.
Ответ
Это один из лучших ресурсов, которые я нашел для изучения оптимизации.
http://www.agner.org/optimize/
Напыщенная речь
Если вы читаете некоторые статьи крупных разработчиков (например, рассуждения о создании EASTL и более внимательный анализ кода приведут вас к комментариям, подобным тому, как это сделано, потому что GCC ужасно указывает на это утверждение if, которое скажет вам, что большинство люди говорят, что вы доверяете компилятору, который не всегда прав, особенно в разработке игр), а затем вступаете в индустрию, вы обнаружите, что оптимизация - это повседневное дело, и знание того, что означает вывод сборки, является большим плюсом. Кроме того, люди, кажется, не осознают (особенно в стеке потока), что профилирование игр очень сложно и не всегда точно.
Есть предостережение, хотя. Вы можете потратить время на оптимизацию чего-то, а потом осознать, что было потрачено время. Но что вы узнали? Вы научились не повторять ту же ошибку в аналогичных обстоятельствах.
То, что сейчас занимает SO - это, на мой взгляд, религиозная позиция в отношении этого утверждения , не оптимизируйте, пока вы не профилируете и не волнуйтесь, компилятор знает лучше вас . Это мешает обучению. Я знаю экспертов в отрасли, которым платят очень хорошие деньги (и я имею в виду ОЧЕНЬ хорошие деньги), чтобы возиться в сборке, чтобы оптимизировать игру и отлаживать ее, потому что компилятор в этом плох или просто не может вам помочь, потому что, ну, это не может (сбои, связанные с графическим процессором, сбои, в которых невозможно прочитать данные в отладчике и т. д. и т. д.)!
Что, если кто-то, кто любит это делать, еще не полностью осознал это, задает вопрос здесь и отвергается / выключается компилятором многих ответов, который знает лучше вас! и никогда не станет одним из тех высокооплачиваемых программистов?
Одна заключительная мысль. Если вы начнете делать это рано, вы обнаружите, что скоро вы начнете писать код, который наихудший, не имеет никаких улучшений производительности, потому что компилятор оптимизировал его таким же образом или в лучшем случае, имеет некоторые улучшения производительности, потому что теперь компилятор может оптимизировать его , В любом случае, это стало привычкой, и вы не так медленнее пишете код, чем раньше. Вот пара примеров (есть еще много):
- Преинкремент, если вы действительно не хотите постинкремент
- Написание циклов для контейнеров с использованием постоянной локальной переменной размера, а не вызова size () для контейнера внутри цикла.
РЕДАКТИРОВАТЬ: Обновление после еще 8 лет в отрасли. Изучите сборку. Узнайте, как работают оптимизаторы и какие сборки они генерируют (CompilerExplorer - отличный инструмент для этого). Я сталкивался с бесчисленными сбоями в тестовых сборках (оптимизированных сборках для внутреннего тестирования), где вы не можете полагаться на отладчик даже с символами отладки. Компилятор оптимизировал слишком много вещей, и сборка - ваш единственный источник ценной информации, чтобы найти ошибку из аварийного дампа. Каждая сборка занимает 30-40 минут, если вам повезет, и сначала в очереди на сборку - поэтому вы не можете полагаться на некоторые традиционные методы, чтобы изолировать ошибку. Мультиплеер делает вещи хуже. Знание сборки и умение читать оптимизированную сборку просто сделает вас лучше и, в конечном счете, более ценным для команды.