Получить оптимизированный исходный код от GCC - PullRequest
4 голосов
/ 19 декабря 2011

У меня есть задача создать оптимизированный исходный код C ++ и передать его другу для компиляции.Это означает, что я не контролирую окончательную компиляцию, я просто пишу исходный код программы на C ++.

Я знаю, что во время компиляции можно оптимизировать с опциями -O1 (и -O2 и других)GCC.Но как я могу получить этот оптимизированный исходный код вместо скомпилированной программы?Я не могу настроить параметры компилятора моего друга, поэтому мне нужно сделать хороший источник на моей стороне.

Ответы [ 3 ]

5 голосов
/ 19 декабря 2011

Оптимизация, выполняемая GCC, является низкоуровневой, это означает, что вы не получите код C ++ снова, а код сборки в лучшем случае. Но вы не сможете конвертировать или что-то в этом роде.

В сумме: Оптимизируйте исходный код на уровне кода, а не на уровне объекта.

3 голосов
/ 19 декабря 2011

Вы можете попросить GCC до dump его внутреннее (Gimple, ...) представлений , на различных "этапах".Средний конец GCC состоит из сотен проходов, и вы можете попросить GCC сбросить их с аргументами , такими как -fdump-tree-all или -fdump-gimple-all;имейте в виду, что вы можете получить сотни файлов дампа для одной компиляции!

Однако, внутренние представления GCC находятся на довольно низком уровне, и вы не должны ожидать, что поймете их, не прочитав много материала.

Опции дампа, о которых я упоминаю, в основном полезны для тех, кто работает внутри GCC или расширяет его с помощью плагинов с кодом C или расширений с кодом MELT (высокий-уровень языка для расширения GCC).Я не уверен, что они будут очень полезны для вашего друга.Тем не менее, они могут быть полезны для того, чтобы вы поняли, что этапы оптимизации выполняют сложную обработку.

И не забывайте, что преждевременная оптимизация - это зло : сначала вы должны запустить программуправильно, затем сравните и профилируйте его, наконец, оптимизируйте несколько частей ваших усилий.Вероятно, вы не сможете писать правильные и эффективные программы, не протестировав и не запустив их самостоятельно, прежде чем отдать их своему другу.

1 голос
/ 19 декабря 2011

Легко - выберите лучший алгоритм из всех возможных, пусть остальное будет обработано оптимизатором.

Оптимизация исходного кода отличается от оптимизации двоичного файла. Вы оптимизируете исходный код, компилятор оптимизирует двоичный файл.

Для чего-то большего, чем выбор алгоритма, вам нужно выполнить некоторое профилирование.Конечно, есть практики, которые могут ускорить скорость кода, но некоторые делают код менее читабельным.Оптимизируйте только тогда, когда вам нужно, и после того, как вы измеряете.

...