Есть ли в Visual C ++ какой-либо способ получить изменчивое поведение "C" только без ограничения памяти?
В x86 нет ограничений памяти, созданных на уровне сборки при чтении и записи в область памяти volatile
, поскольку на этой платформе каждая загрузка имеет семантику получения, а каждое хранилище имеет семантику выпуска. Поэтому для MSVC на x86 директива volatile
просто указывает компилятору предотвращать переупорядочение загрузок и сохранений в зависимости от того, пишете ли вы или читаете из области памяти, помеченной volatile
.
Вы бы понесли "штраф" за ограничение памяти в архитектуре IA64, поскольку там модель упорядочения памяти платформы не обеспечивает сбор и освобождение семантики для нагрузок и хранилищ.
Имейте в виду, что это поведение специфично для MSVC и не является стандартизированной семантикой volatile
.
Обновление : Согласно @ildjarn, вы также можете увидеть ограничение памяти на ARM с Windows 8, поскольку эта платформа также имеет слабо упорядоченную модель согласованности памяти, такую как IA64.