Здесь вы делаете много предположений.Прежде всего, ваш синтаксис.Второе - это то, что компиляторы идеальны в глазах смотрящего и ловят все.Реальность такова, что легко найти и оптимизировать выходные данные компилятора, нетрудно написать небольшие функции, чтобы отключить компилятор, с которым вы хорошо настроены, или написать приложение приличного размера, и будут места, где вы сможете передатьмелодия.Это все известно и ожидается.Затем приходит мнение, что на моей машине мой бла быстрее, чем бла, поэтому он должен был сделать эти инструкции вместо этого.
gcc не отличный компилятор для производительности, по некоторым целям он ухудшался для рядаосновные обороты.Он довольно хорош в том, что он делает, лучше, чем довольно хорошо, он имеет дело с несколькими препроцессорами / языками, имеющими общую середину и несколько бэкэндов.Некоторые бэкэнды получают лучшую оптимизацию, примененную спереди назад, другие просто держатся за поездку.В свое время, когда я обращал на это внимание, существовал ряд других компиляторов, которые могли генерировать код, который мог легко превзойти gcc.
В основном это платные компиляторы.Больше, чем кто-либо платил бы из своего кармана, цены на подержанные автомобили, иногда повторяющиеся ежегодно.
Есть вещи, которые gcc может оптимизировать, которые просто удивительны, и в то время, когда он полностью движется в неправильном направлении.То же самое относится и к лязгам, часто они выполняют схожую работу с похожим результатом, иногда делают некоторые впечатляющие вещи, иногда просто уходят в сорняки.Теперь я нахожу более забавным манипулировать оптимизатором, чтобы он делал хорошие или плохие вещи, а не беспокоиться о том, почему он не сделал то, что, как мне кажется, следовало бы сделать в конкретном случае.Если мне нужен этот код быстрее, я беру скомпилированный вывод, исправляю его вручную и использую как функцию сборки.Готово.
Вы получаете то, за что платите, с помощью gcc, если вы загляните в его недра, вы обнаружите, что он едва удерживается вместе с клейкой лентой и проволочной сеткой (llvm наверстывает упущенное).Но для бесплатного инструмента это просто потрясающая работа, он настолько широко используется, что вы можете получить бесплатную поддержку практически в любом месте.Мы, к сожалению, переживаем время, когда люди думают, что это потому, что gcc интерпретирует язык определенным образом, именно так он определяется, и, к сожалению, это не так.Но очень многие люди не пробуют другие компиляторы выяснить, что на самом деле означает определенная реализация.
Последнее и самое важное, его открытый исходный код, если вы хотите "исправить" оптимизацию ... тогда просто сделайте это ...Сохраните это исправление для себя или опубликуйте его или попробуйте отправить его вверх по течению.