ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
7 ноября
853215 Топик полностью
sladkoejka (05.07.2018 17:19, просмотров: 499) ответил Bill на Сравнивайте
Что сравнивать? В вашем примере ошибка - вы закоментили вызов __no_operation(). Без этого вызова цикл должен быть удалён. То, что с volatile не удаляет - это результат плохой оптимизации. Мозгов у компилятора не хватает чтобы отследить, что получить ссылку на локальную переменную никто не может. А в полноценном цикле с volatile и без я уже сравнивал. Время выполнения delay(10000): - без volatile, компиляция с адреса 0x0055, время = 4682268 циклов - без volatile, компиляция с адреса 0x0056, время = 4682268 циклов - с volatile, компиляция с адреса 0x0055, время = 10683012 циклов - с volatile, компиляция с адреса 0x0056, время = 10683012 циклов Как видим volatile сделало код менее эффективным. Был бы оптимизатор более навороченным, то разницы вообще не было-бы. В любом случае, на зависание процессора это никак не влияет. При компиляции с адреса 0x0055 он зависает в обоих случаях.