ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 апреля
919399 Топик полностью
Nikolay_Po (04.05.2019 20:40, просмотров: 245) ответил SciFi на Для исключения оптимизации можно просто выключить оптимизацию. Ну и с каких пор volatile или нет подменяет адрес переменной её значением? С тем же успехом можно сплясать с бубном.
ПМСМ, отключение оптимизации при отладке слишком сильно меняет код и время его выполнения, что делает отладку слишком оторванной от конечного продукта. Не согласен на счёт бесполезности volatile для предотвращения подмены адреса. Volatile означает для компилятора, что значение изменяется вне контроля кода на этом листе. Считая, что значение полностью под контролем, компилятор может его оптимизировать, включая замену указателя на значение, вплоть до удаления, до тех пор пока внешний эффект от выполнения остаётся тем же, что и без оптимизации. Когда значение объявлено volatile, компилятор будет обрабатывать его как неизвестное и будет вынужден использовать указатель как запрошено программистом. Ну разве что компилятор очень способный и смог обработать указатель так, что вместо указателя использует значение. Поэтому объявить volatile нужно именно указатель, а не память, не значение, на которые он указывает.