реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Компиляторы: выполняется ли оптимизация по умолчанию?
job_andrey
сообщение Dec 30 2008, 14:49
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 30-12-08
Пользователь №: 42 852



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

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

Вообще это нужно применительно к Wind River и TI Code Composer Studio, но полезной будет информация о любых компиляторах.
Go to the top of the page
 
+Quote Post
Proton
сообщение Dec 30 2008, 15:44
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334



Цитата(job_andrey @ Dec 30 2008, 20:49) *
1. Если убрать все ключи оптимизации компилятора, будет ли выполнятся какая-либо оптимизация по умолчанию?
При выключенной оптимизации встречался только с выбрасыванием компилятором неиспользуемых переменных.


--------------------
Всяк хорошая мысля к нам приходит опосля.
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Dec 30 2008, 19:05
Сообщение #3


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(job_andrey @ Dec 30 2008, 16:49) *
Требуется получить машинный код, в котором для каждого его куска можно найти соответствующий кусок в исходном коде (на С). Т.е. в генерируемом компилятором машинном коде не должны присутствовать какие-либо неявные вставки, не имеющие соответствующего отображения исходном коде (вроде проверки границ массивов), и наоборот ничто не должно быть отрезано.
Это и есть "без оптимизации".
Цитата
1. Если убрать все ключи оптимизации компилятора, будет ли выполнятся какая-либо оптимизация по умолчанию?
Читайте документацию на компилятор. IAR по умолчанию оптимизирует "слегка" (по скорости).
Цитата
2. На каких этапах выполняется оптимизация: до преобразования в ассемблерный код и/или после?
Хм. Имхо во время "преобразования в ассемблерный код". То, что Вы получите в .lst и в .hex, есть конечный продукт работы компилятора; все оптимизации уже сделаны до того. Линкер ничего не оптимизирует в коде.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 30 2008, 20:10
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(HARMHARM @ Dec 30 2008, 23:05) *
Это и есть "без оптимизации".
Читайте документацию на компилятор. IAR по умолчанию оптимизирует "слегка" (по скорости).
Хм. Имхо во время "преобразования в ассемблерный код". То, что Вы получите в .lst и в .hex, есть конечный продукт работы компилятора; все оптимизации уже сделаны до того. Линкер ничего не оптимизирует в коде.


Вы форум почитайте внимательно (http://electronix.ru/forum/index.php?showtopic=57108). Там приводились примеры, что это справедливо не для всех современных компиляторов/линкеров. Может для IAR это и работает, но автор ветки спрашивал вообще о компиляторах.
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 31 2008, 01:48
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(sergeeff @ Dec 30 2008, 22:10) *
для IAR это и работает, но автор ветки спрашивал вообще о компиляторах.

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

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

Линкер все же может не так уж и много... Подключать/не подключать готовый блок, и если подключать то выбрать между FAR, NEAR и т.п., либо INLINE вставкой. А эти самые "готовые блоки" готовит компилятор, следовательно именно он делает основные телодвижения по оптимизации. Поэтому с HARMHARM можно согласиться.
Go to the top of the page
 
+Quote Post
job_andrey
сообщение Jan 11 2009, 09:57
Сообщение #6





Группа: Новичок
Сообщений: 2
Регистрация: 30-12-08
Пользователь №: 42 852



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

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


2 sergeeff:
Спасибо! Ссылка помогла расширить кругозор по теме.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 11 2009, 12:41
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



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

Советую заглянуть в эту статью Википедии:
http://en.wikipedia.org/wiki/Compiler_optimization
1. Всё относительно, а оптимизация - особенно. Для кого-то кусок кода может выглядеть очень оптимизированным, а для кого-то - наоборот. Всё зависит от точки зрения. Однако, в RealView на низшем уровне оптимизации замечал оптимизацию локальных переменных.
2. И до, и после. См. указанную статью Википедии.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 14:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01403 секунд с 7
ELECTRONIX ©2004-2016