ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
7 ноября
853169 Топик полностью
sladkoejka (05.07.2018 14:45 - 14:50, просмотров: 442) ответил 0men на без volatile оптимизатор без проблем может выкинут цикл
Тело цикла компилятор выбрасывает не из-за volatile, а из-за того что он ничего не делает. Так все оптимизирующие компиляторы работают. Чтобы цикл не выбрасывался, в его теле явно прописано выполнение NOP. Именно для того чтобы цикл не выбрасывался. volatile запрещает делать компилятору предположение, что переменная сама по себе меняться не будет и обращения к ней можно кэшировать. Это критично для переменных, которые из прерываний изменяются или под RTOS, где переменная может измениться из другой задачи, во время выполнения кода, который её использует.