ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
853178 Топик полностью
sladkoejka (05.07.2018 15:02 - 15:06, просмотров: 395) ответил Petrovich на Вот по этоой статье учились поколения :)
Ничего нового в этой статье нет. Насчет использования volatile в циклах - это очень неудачный совет. Лучше использовать какое-либо полезное действие в теле цикла (например NOP). И вот почему.  При использовании volatile для переменной цикла, компилятор вынужден считать, что переменная может измениться во время работы цикла, поэтому если он не достаточно умный, то выкидывать такой цикл не будет. Это к вопросу почему в данном случае volatile помогает. Однако это некорректное решение, т.к. компилятор может быть достаточно умным, чтобы проанализировать, что переменная недоступна из другого кода (на неё нет никаких сссылок). И такой компилятор со спокойной душой удалит цикл, использующий локальную переменную, помеченную как volatile. Почему? Потому что тело такого цикла пустое - ничего не делает. А значение локальной переменной, помеченной как volatile другим кодом использоваться не может. Т.к. на такую переменную невозможно получить ссылку. Поэтому её изменение бесполезное занятие. С другой стороны, код не пустого цикла, который выполняет полезную работу (в данном случае NOP) компилятор уже не сможет выбросить ни при каких условиях, т.к. этот цикл обязан выполнить указанную операцию NOP заданное число раз.