Другая проблема - выравнивание кода и другие оптимизации. В настоящее время процессоры настолько сложны, что трудно предсказать, какие методы приведут к более быстрому выполнению финального двоичного файла.
В качестве примера из реальной жизни давайте рассмотрим собственный клиент Google - я имею в виду оригинальный подход к компиляции nacl, не затрагивающий LLVM (потому что, насколько я знаю, в настоящее время существует руководство по поддержке как "nativeclient", так и "битового кода LLVM") (модифицированный) код).
Как вы можете видеть на презентациях (см. Youtube.com) или в документах , например, Собственный клиент: песочница для переносимого ненадежного собственного кода x86 , даже их выравнивание Техника увеличивает размер кода, в некоторых случаях такое выравнивание команд (например, с помощью noops) дает лучшее попадание в кеш.
Выравнивание инструкций с noops и переупорядочивание команд, известных в параллельных вычислениях, и здесь это также показывает их влияние.
Я надеюсь, что этот ответ дает представление о том, как обстоятельства могут повлиять на скорость выполнения кода, и это множество возможных причин для разных частей кода, и каждый из них требует изучения. Никогда, это интересная тема, поэтому, если вы найдете более подробную информацию, не стесняйтесь переиздать свой ответ и дайте нам знать в "Post-Scriptorium", что вы нашли больше :). (Может быть, ссылка на официальный документ / devblog с новыми находками :)). Тесты всегда приветствуются - взгляните: http://llvm.org/OpenProjects.html#benchmark.