Jump to content

    

Оптимизация в компиляторе. Нужна или нет?

Для этого есть вполне конкретные инструменты, что в С, что в С++. В чем необходимость использовать не их, а полагаться на особенности реализации платформы? Напомню вопрос был про задачи где требуется нарушать, а не кому-то хочется или кто-то не знает как правильно.

4 минуты назад, AlexandrY сказал:

Первый раз слышу. В IAR не наблюдается зависимости времени компиляции от опции оптимизации.  

А что ИАР - это С, а С это ИАР? Я говорил про заметно более ранние времена.

Share this post


Link to post
Share on other sites
2 minutes ago, Kabdim said:

Для этого есть вполне конкретные инструменты, что в С, что в С++. В чем необходимость использовать не их, а полагаться на особенности реализации платформы? Напомню вопрос был про задачи где требуется нарушать, а не кому-то хочется или кто-то не знает как правильно.

А что ИАР - это С, а С это ИАР? Я говорил про заметно более ранние времена.

В стандарте много чего можно понаписать.
А посмотрев поглубже обнаружишь необходимость ретаргетинга.
Т.е. вы сами и должны реализовывать фишки этого стандарта. 

В курсе что атомарность в ARM-ах не на всех областях памяти работает? 
Впрочем это тут тоже обсуждалось.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
1 hour ago, Kabdim said:

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

Компилятор не размещает. Размещает линкер. Где будут, а где не будут работать атомарные операции даже в даташитах на микроконтроллеры не найдете.
На самом деле я не собирался тут воевать со стандартом.
Я его не читал и не планирую читать. 
И не стоит нагнетать  вроде   назовите "общие случаи когда нужно нарушать стандарт". 
Мысль была о нарушении неких правил безопасности.  Тут даже доля метафоричности есть. 
Вы легко можете посмотреть в свой код и все это увидеть если вы пишете не под MISRA
 

 

 

Share this post


Link to post
Share on other sites

@AlexandrY  а в каких областях атомарные операции не работают в ARMах?

Share this post


Link to post
Share on other sites
14 минут назад, Segment сказал:

@AlexandrY  а в каких областях атомарные операции не работают в ARMах?

Не обращайте внимания.

Все LDR/LDRH/LDRD/STR/STRH/STRD, а также LDREX../STREX.. атомарны в пределах одного ядра Cortex-M. Неатомарны только LDM/STM, PUSH/POP. Но как я вижу - IAR например LDM/STM почти не использует при компиляции си-кода. Возможно как раз по причине их неатомарности.

Share this post


Link to post
Share on other sites
2 часа назад, AlexandrY сказал:

Компилятор не размещает. Размещает линкер. Где будут, а где не будут работать атомарные операции даже в даташитах на микроконтроллеры не найдете.
На самом деле я не собирался тут воевать со стандартом.
Я его не читал и не планирую читать. 
И не стоит нагнетать  вроде   назовите "общие случаи когда нужно нарушать стандарт". 
Мысль была о нарушении неких правил безопасности.  Тут даже доля метафоричности есть. 
Вы легко можете посмотреть в свой код и все это увидеть если вы пишете не под MISRA

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

Share this post


Link to post
Share on other sites
В 03.12.2018 в 11:25, inventor сказал:

вот , например, стандартный пример: 

static /*volatile*/ u32 LocalTime  @ ".fastdata" = 0;

void Delay(int timer)
{
   u32 Time = LocalTime;  
   while(LocalTime - Time < timer);
}

 

В этом коде однозначно не зависимо от вида компилятора, уровня оптимизации и др внешних факторов ДОЛЖНО использоваться volatile

Edited by Alex77

Share this post


Link to post
Share on other sites
41 минуту назад, Alex77 сказал:

В этом коде однозначно не зависимо от вида компилятора, уровня оптимизации и др внешних факторов ДОЛЖНО использоваться volatile

Всё-таки timer должно быть тоже u32.

Share this post


Link to post
Share on other sites
On 12/9/2018 at 2:12 PM, AlexandrY said:

Тут не идеи нужны, а детерминизм входа и выхода у компилятора. Вот его в C/C++ и нету.

Крайне удивительное утверждение. :(

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

При условии соблюдения всех правил ими пользования.

Share this post


Link to post
Share on other sites
5 hours ago, Stanislav said:

... детерминизм входа и выхода компилятора и оптимизатора есть первое, и необходимое, условие их существования вообще.

При условии соблюдения всех правил ими пользования.

Эт не ответ на главный вопрос. 
А вопрос в том почему компилятор C сразу все не оптимизирует по максимуму, как делается с современных языках? 
Почему ахинея без volatile РАБОТАЕТ хотя и не ДОЛЖНА? 
Какая логика в этом заложена? 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
47 минут назад, ViKo сказал:

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

Откройте для себя чекбокс "Мультифайловая оптимизация" в свойствах проекта.

Share this post


Link to post
Share on other sites
17 минут назад, jcxz сказал:

Откройте для себя чекбокс "Мультифайловая оптимизация" в свойствах проекта.

Это который из них?

K.jpg

Share this post


Link to post
Share on other sites
4 минуты назад, ViKo сказал:

Это который из них?

Этот:

2018-12-27_11-37-36.png

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now