AlexandrY 3 5 декабря, 2018 Опубликовано 5 декабря, 2018 · Жалоба 23 minutes ago, inventor said: то и наблюдаемое поведение будет разным Мда, идея использовать понятие "наблюдаемое поведение" была явно неудачной. Я бы попробовал взять понятие "причинность". Компилятор вправе удалить все операции у которых нет причины, нет интринсиков и нет следов использования извне. Значит надо сейчас скомпилить этот проблемный код в библиотеку и посмотреть что будет в этом случае. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 5 декабря, 2018 Опубликовано 5 декабря, 2018 · Жалоба 39 минут назад, inventor сказал: если при оптимизации пишешь local_time как volatile - то она работает как задержка Время выполнения и размер программы не входят в понятие "наблюдаемое поведение". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 5 декабря, 2018 Опубликовано 5 декабря, 2018 · Жалоба а что входит? не является ли этот волатайл такой же ненужной штукой как auto в C? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 5 декабря, 2018 Опубликовано 5 декабря, 2018 (изменено) · Жалоба Inventor, почитайте на досуге: https://habr.com/sandbox/114114/ http://www.pic24.ru/doku.php/osa/articles/volatile_for_chainiks https://tproger.ru/problems/what-is-the-purpose-of-the-keyword-volatile-in-c/ Хочу подчеркнуть, что второй ссылкой я не хочу косвенно намекнуть о Вашем непонимании в отношении названия статьи - не я ее автор. Но эти ссылки реально полезно прошерстить. Иначе все эти 7 страниц будут впустую, а понимание так и не придет... Изменено 5 декабря, 2018 пользователем Arlleex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 9 5 декабря, 2018 Опубликовано 5 декабря, 2018 (изменено) · Жалоба 6 часов назад, Arlleex сказал: А Вы не находите, что наличие asm("nop")... Вопрос, почему оно с непустым телом работает - тоже вопрос Читайте документацию! asm volatile("" ::: "memory"); creates a compiler level memory barrier forcing optimizer to not re-order memory accesses across the barrier. Сомнения в работе оптимизирующего компилятора большей частью от безграмотности. Изменено 5 декабря, 2018 пользователем _3m Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 5 декабря, 2018 Опубликовано 5 декабря, 2018 · Жалоба 4 минуты назад, _3m сказал: Читайте документацию! asm volatile("" ::: "memory"); creates a compiler level memory barrier forcing optimizer to not re-order memory accesses across the barrier. Сомнения в работе оптимизирующего компилятора большей частью от безграмотности. Во-первых, при чем тут я? Во-вторых, у автора asm(...), а не asm volatile(...). Исходя из этого, а также отсутствия информации о располагаемом компиляторе у автора топика (да это и не суть, а может я не досмотрел где-то в толще этой темы), было логично сформировать такой риторический вопрос о том, почему эта конструкция работает. Не зря я написал, что ее работа также подвергается сомнению, поскольку без volatile гарантировать правильность работы указанной функции не представляется возможным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 5 декабря, 2018 Опубликовано 5 декабря, 2018 · Жалоба 2 часа назад, inventor сказал: а что входит? Открываете Стандарт, ищите там "behavior of an abstract machine", читаете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 5 декабря, 2018 Опубликовано 5 декабря, 2018 · Жалоба 1 hour ago, Arlleex said: поскольку без volatile гарантировать правильность работы указанной функции не представляется возможным. но она работает кстате. lwip 1.3.2 volatile переменная объявлена всего один раз Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 5 декабря, 2018 Опубликовано 5 декабря, 2018 · Жалоба 40 минут назад, inventor сказал: кстате. lwip 1.3.2 volatile переменная объявлена всего один раз КстатИ. И о чем это нам должно говорить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 5 декабря, 2018 Опубликовано 5 декабря, 2018 · Жалоба 1 hour ago, inventor said: но она работает кстате. lwip 1.3.2 volatile переменная объявлена всего один раз В mbed, который включает lwip переменные volatile встречаются более 1400 раз! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
psyhologic 0 5 декабря, 2018 Опубликовано 5 декабря, 2018 · Жалоба 3 часа назад, inventor сказал: а что входит? не является ли этот волатайл такой же ненужной штукой как auto в C? В 03.12.2018 в 10:25, inventor сказал: static /*volatile*/ u32 LocalTime @ ".fastdata" = 0; void Delay(int timer) { u32 Time = LocalTime; while(LocalTime - Time < timer); } По определению: "Volatile - ключевое слово языков C/C++, которое информирует компилятор о том, что значение переменной может меняться из вне и что компилятор не будет оптимизировать эту переменную." Как следствие, он не выкинет бесполезный while block с "активным ожиданием". https://en.wikipedia.org/wiki/Busy_waiting "Активное ожидание" в SMP среде само по себе затратно и обычно используется скорее как userspace оптимизация, до входа в kernel mode waiting. Хотя в мире однопоточных МК, я часто вижу использование активного ожидания. Вопросы могут быть к оптимизатору / компилятору, насколько он строго следует стандартам языка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 5 декабря, 2018 Опубликовано 5 декабря, 2018 · Жалоба 51 minutes ago, Сергей Борщ said: КстатИ. И о чем это нам должно говорить? Это должно говорить, что lwip легко перенесет любую оптимизацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 5 декабря, 2018 Опубликовано 5 декабря, 2018 · Жалоба 12 минут назад, AlexandrY сказал: Это должно говорить, что lwip легко перенесет любую оптимизацию. Не вижу связи. Но хотел услышать ответ от автора вброса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 5 декабря, 2018 Опубликовано 5 декабря, 2018 · Жалоба 19 minutes ago, psyhologic said: "Volatile - ключевое слово языков C/C++, которое информирует компилятор о том, что значение переменной может меняться из вне и что компилятор не будет оптимизировать эту переменную." Это все познавательно, но по прежнему не раскрыта интрига: так что это за оптимизации над переменной? Оптимизируется не переменная, а наверно все таки код вокруг нее. Так вот как далеко заходят пределы этой консервации оптимизации при встрече с volatile? Может в этом скрытый смысл поднятой темы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 6 декабря, 2018 Опубликовано 6 декабря, 2018 · Жалоба хорошо. Такой вопрос' когда использование volatile нежелательно и может испортить работу программы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться