Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компиляторы: выполняется ли оптимизация по умолчанию?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
job_andrey
Требуется получить машинный код, в котором для каждого его куска можно найти соответствующий кусок в исходном коде (на С). Т.е. в генерируемом компилятором машинном коде не должны присутствовать какие-либо неявные вставки, не имеющие соответствующего отображения исходном коде (вроде проверки границ массивов), и наоборот ничто не должно быть отрезано.

В связи с этим возникает вопрос, когда и как компиляторы выполняют оптимизацию?
1. Если убрать все ключи оптимизации компилятора, будет ли выполнятся какая-либо оптимизация по умолчанию?
2. На каких этапах выполняется оптимизация: до преобразования в ассемблерный код и/или после?

Вообще это нужно применительно к Wind River и TI Code Composer Studio, но полезной будет информация о любых компиляторах.
Proton
Цитата(job_andrey @ Dec 30 2008, 20:49) *
1. Если убрать все ключи оптимизации компилятора, будет ли выполнятся какая-либо оптимизация по умолчанию?
При выключенной оптимизации встречался только с выбрасыванием компилятором неиспользуемых переменных.
HARMHARM
Цитата(job_andrey @ Dec 30 2008, 16:49) *
Требуется получить машинный код, в котором для каждого его куска можно найти соответствующий кусок в исходном коде (на С). Т.е. в генерируемом компилятором машинном коде не должны присутствовать какие-либо неявные вставки, не имеющие соответствующего отображения исходном коде (вроде проверки границ массивов), и наоборот ничто не должно быть отрезано.
Это и есть "без оптимизации".
Цитата
1. Если убрать все ключи оптимизации компилятора, будет ли выполнятся какая-либо оптимизация по умолчанию?
Читайте документацию на компилятор. IAR по умолчанию оптимизирует "слегка" (по скорости).
Цитата
2. На каких этапах выполняется оптимизация: до преобразования в ассемблерный код и/или после?
Хм. Имхо во время "преобразования в ассемблерный код". То, что Вы получите в .lst и в .hex, есть конечный продукт работы компилятора; все оптимизации уже сделаны до того. Линкер ничего не оптимизирует в коде.
sergeeff
Цитата(HARMHARM @ Dec 30 2008, 23:05) *
Это и есть "без оптимизации".
Читайте документацию на компилятор. IAR по умолчанию оптимизирует "слегка" (по скорости).
Хм. Имхо во время "преобразования в ассемблерный код". То, что Вы получите в .lst и в .hex, есть конечный продукт работы компилятора; все оптимизации уже сделаны до того. Линкер ничего не оптимизирует в коде.


Вы форум почитайте внимательно (http://electronix.ru/forum/index.php?showtopic=57108). Там приводились примеры, что это справедливо не для всех современных компиляторов/линкеров. Может для IAR это и работает, но автор ветки спрашивал вообще о компиляторах.
defunct
Цитата(sergeeff @ Dec 30 2008, 22:10) *
для IAR это и работает, но автор ветки спрашивал вообще о компиляторах.

Тем не менее он спросил в ветке по IAR.. ;>

Цитата
Вы форум почитайте внимательно (http://electronix.ru/forum/index.php?showtopic=57108). Там приводились примеры, что это справедливо не для всех современных компиляторов/линкеров.

Линкер все же может не так уж и много... Подключать/не подключать готовый блок, и если подключать то выбрать между FAR, NEAR и т.п., либо INLINE вставкой. А эти самые "готовые блоки" готовит компилятор, следовательно именно он делает основные телодвижения по оптимизации. Поэтому с HARMHARM можно согласиться.
job_andrey
2 HARMHARM:
1. К сожалению, в имеющейся документации исследуемых компиляторов ничего не говорится о «неявной» оптимизации. Дается информация только о ключах «явной» оптимизации. По словам заказчика разработчики компиляторов также не дали информации по этому поводу.

2. А .lst и .hex всегда однозначно соответствуют друг другу?


2 sergeeff:
Спасибо! Ссылка помогла расширить кругозор по теме.
scifi
Цитата(job_andrey @ Dec 30 2008, 17:49) *
В связи с этим возникает вопрос, когда и как компиляторы выполняют оптимизацию?
1. Если убрать все ключи оптимизации компилятора, будет ли выполнятся какая-либо оптимизация по умолчанию?
2. На каких этапах выполняется оптимизация: до преобразования в ассемблерный код и/или после?

Советую заглянуть в эту статью Википедии:
http://en.wikipedia.org/wiki/Compiler_optimization
1. Всё относительно, а оптимизация - особенно. Для кого-то кусок кода может выглядеть очень оптимизированным, а для кого-то - наоборот. Всё зависит от точки зрения. Однако, в RealView на низшем уровне оптимизации замечал оптимизацию локальных переменных.
2. И до, и после. См. указанную статью Википедии.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.