Перейти к содержанию
    

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, Kabdim said:

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Kabdim said:

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 минут назад, Segment сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, AlexandrY сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 03.12.2018 в 11:25, inventor сказал:

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

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

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

 

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

Изменено пользователем Alex77

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

41 минуту назад, Alex77 сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/9/2018 at 2:12 PM, AlexandrY said:

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, Stanislav said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

47 минут назад, ViKo сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 минут назад, jcxz сказал:

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

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

K.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...