ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
811550 Топик полностью
fk0, легенда (23.01.2018 23:49, просмотров: 149) ответил Молодой коллега на Что ни так?
Условие в цикле (первый if) посчитано в ассемблерном листинге ДО всех операций в for. И сразу принято решение, крутиться в for, или сразу break до for (а чего зазря считать). Компилятор не в курсе же, что run_timer_ms или gradient_table[i][0] у тебя на ходу могут поменяться. Он видит, что в функции ты их не меняешь и может делать выводы. И, кстати, следуюший аспект на который ещё наткнёшся -- порядок записи переменных в ячейки из регистров процессора тоже вобщем-то никто не гарантировал. Запросто все твои присваивания в цикле, например, перекинет в конец функции и запишет только финальные значения на выходе из функции (потому, что она сама, функция -- барьер). Вставишь volatile -- будет писать сами volatile в том порядке, а всё остальное -- как придётся. Изучай memory barriers.
[ZX]