Pull to refresh
0
0
Send message
Экономическая целесообразность: есть квартира ~100 м^2 в Уфе. За те же деньги можно купить котедж ~170-200 м^2 в 30 минутах от офиса. Климат резко-континентальный, летом как в сочах, есть горы. Расскажите, как с этим в Нерезиновой?

Тут мегаприрода и горы! К ним каждые выходные можно ездить :)
С этим согласен. Но без volatile из-за компиляторных оптимизаций ты можешь не прочитать новые данные записанные в память. В этом сходство. Хочешь читать память обновляемую, например, датчиком контроллера — будь добр объяви её volatile (ну или выключить оптимизацию прагмой), иначе можешь не получить того, что ожидаешь.

Каноничный пример, когда stop может быть изменена в другом потоке/процессе
int * stop = (int *) 0xBABABABA; *stop=0; while (!*stop) { /* do smth */ }

может быть оптимизирован компилятором в
while (1) { /* do smth */ }

Практически всегда, когда какая-то область памяти может изменяться в другом потоке/процессе её следует объявлять с volatile. Не буду углубляться, сам могу уже не помнить всех тонкостей, давно не писал на C/C++. Есть немало хороших статей на тему.
В С++ volatile запрещает компилятору оптимизировать доступ к памяти. Нужно оно если память может быть изменена другим потоком, процессом или если память, например, замаплена на регистр какого-то устройства. Т.е. сементика почти такая же. Есть ещё ключевое слово register, которое рекомендует компилятору разместить переменную в регистре.

Information

Rating
Does not participate
Registered
Activity