ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
1138949 Топик полностью
RxTx (16.10.2021 20:02, просмотров: 376) ответил klen на "Проливание бобов": volatile в C++ и неправильное его использования. коротко и доходчиво
volatile древняя вещь, потребность в ней возникла почти сразу же при создании системного языка. Этот атрибут ставится для того чтобы кодогенератор не распределял под переменную регистр процессора. Не "не проводил оптимизацию", бла-бла-бла, а чтобы автоматом не распределял переменную в регистр процессора. Это то как надо понимать volatile а не ‘it can change outside of what the compiler might assume‘. Хотя последнее конечно верно, но это уже следствие. При разработке 

компилятора возникает вопрос оптимального распределения переменных в регистры процессора. Нормальная стратегия распределения - максимально долгое удержание в регистрах, так как это обеспечивает производительность. Если memory-mapped ячейка памяти сама самопроизвольно изменилась, или на каждом шаге алгоритма ее нужно обновлять, то это не будет работать, так как содержимое ячейки в самом начале было загружено в регистр и во время работы кода/алгоритма продолжает там находиться. volatile не дает распределеить переменную в регистр, и если архитектура не предусматривает иного, при каждом обращении к переменной она будет загружаться в temp-регистр, будут производиться вычисления, после чего переменная тут же будет выгружена назад в память.