Должен ли компилятор позволять кэшировать volatile-ы?

Вопросы использования и разработки трансляторов, ассемблеров, компиляторов, линкеров, библиотекарей, парсеров, Lex, Yacc и т.п.

Должен ли компилятор позволять кэшировать volatile-переменные?

Да
0
Голосов нет
Нет
3
60%
А что такое компилятор?
2
40%
 
Всего голосов : 5

Должен ли компилятор позволять кэшировать volatile-ы?

Сообщение Соратник слонопотама » 23 мар 2012, 01:43

Оказывается, многие компиляторы по умолчанию позволяют процессору кэшировать переменные, объявленные как volatile, и чтобы это побороть, нужно плясать с бубном, а именно замусоривать код чем-нибуть типа _Uncached, добавлять ключи компиляции вроде -mvolatile-nocache, юзать ассемблерные вставки, объявлять некэшируемые области памяти и т.д. Небольшой опрос на тему "как бы вы назвали компилятор, позволяющий кэшировать volatile-ы", проведенный на работе, показал, что мнения разделились примерно поровну между "чотким компайлером" и "г...ом".

Вот здесь умные люди пишут на эту же тему:
http://stackoverflow.com/questions/7872 ... che-memory
https://www.securecoding.cert.org/confl ... +be+cached
http://lists.gnu.org/archive/html/avr-g ... 00102.html

Якобы стандарт C ничего не говорит про то, можно ли их кэшировать. Но use-case для cached volatile тоже придумать не могут. Я стандарт [не читал, но осуждаю] читал, но ничего не понял - там про какую-то абстрактную машину, ну а про юз-кейсы надо спрашивать программистов.

А каково ваше мнение?
Аватара пользователя
Соратник слонопотама
 
Сообщения: 250
Зарегистрирован: 16 апр 2008, 13:18

Вернуться в Компиляторы и линкеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron