Я могу исследовать оптимизацию с помощью профилировщика, размера исполняемого файла и время для взятия для выполнения.
Я могу получить результат оптимизации. Но у меня есть эти вопросы,
Заранее спасибо.
вы можете получить представление об оптимизации, используя параметр -fdump-tree- оптимизирован
с помощью gcc.
, и вы получите оптимизированный файл. вы не можете запустить код, но используя его, вы можете получить представление об оптимизации. не забудьте включить -O2
или -O3
или какой-либо другой уровень.
Обычно код не оптимизируется как C. Обычно проходы оптимизации выполняются спустя много времени после того, как C был преобразован в некоторая форма промежуточного представления, с которой компилятору легче работать в памяти. Следовательно, прямой ответ на ваш вопрос заключается в том, что оптимизированного кода C никогда не существует.
Компилятор C обычно не создает оптимизированный C ни на одном этапе. Скорее, компилятор превращает C в упрощенное внутреннее представление, и большая часть оптимизаций компилятора будет сделана на одном или нескольких из этих промежуточных представлений . Затем компилятор генерирует из него сборку или двоичный файл.
Самое близкое, что вы можете сделать, это, вероятно, скомпилировать файл в сборку без оптимизации и снова с максимальной оптимизацией, а затем сравнить результат сборки. Для этого вам нужно хорошо владеть языком ассемблера. Если вы используете gcc
, прочтите о переключателях -S и -O, чтобы узнать, как это делать (или не делать).
Если ваша цель - написать более быстрый код, то лучше всего написать лучший C, используя лучшие алгоритмы и структуры данных на уровне C, осторожно используя профилировщик.
Если ваша цель - просто понять оптимизацию, попробуйте Оптимизация программы и Оптимизация компилятора в Википедии для получения общей информации.
Если вы разбираетесь в ассемблере, вы можете проверить сгенерированный компилятором код.
Если вы используете GCC, используйте аргумент для оптимизации кода и используйте --save-temps в качестве аргумента. Все, что говорят, что код C не оптимизирован, поскольку C при компиляции с помощью GCC, в какой-то мере ошибаются. Напишите рекурсивный генератор последовательности Фибоначчи на C и прочитайте предварительно обработанный код. Вышеупомянутый аргумент также сохраняет созданную сборку в каталоге, из которого вызывается GCC. Если вам удобнее использовать сборку синтаксиса Intel, также используйте -masm = intel в качестве аргумента.