Поделиться через


volatile (C++)

Квалификатор типа, можно использовать объявить, что объект можно изменить в программе оборудованием.

volatile declarator ;

Заметки

Можно использовать параметр компилятора /volatile способ компилятор интерпретирует данное ключевое слово.

Visual Studio, ключевое слово volatile по-разному, в зависимости от архитектуры целевого объекта.Для ARM, если параметр компилятора /volatile не указан, то компилятор выполняет, если /volatile:iso не задано.Для архитектур кроме ARM, если параметр компилятора /volatile не указан, то компилятор выполняет, если /volatile:ms не задано. поэтому для архитектуры, кроме ARM, настоятельно рекомендуется задать /volatile:iso и используется точные примитивы синхронизации и встроенных компилятора при работе с памятью, используется отладкой потоков.

Можно использовать квалификатор volatile обеспечивает доступ к расположениям в памяти, используемых асинхронными процессами, например обработчики разрыва.

Когда используется volatile с переменной, также имеет ключевое слово __restrict, volatile имеет приоритет.

Если элемент struct помечен как volatile, volatile, распространяется на структуре целиком.Если структура не имеет длину, можно скопировать в текущей архитектуру с помощью одной инструкции, volatile может быть потеряно полностью на этой структуре.

Ключевое слово volatile может не иметь эффекта в поле, если одно из следующих условий.

  • Длина поля превышает максимальный размер, который можно скопировать на текущей архитектуру с помощью одной инструкции.

  • Длина внешнего, содержащая struct— или если элемент по возможности вложенных — struct, превышает максимальный размер, который можно скопировать на текущей архитектуру с помощью одной инструкции.

Хотя процессор не порядок отменить кэшируемые доступ к памяти, отменить кэшируемые переменные должен быть помечен как volatile, чтобы гарантировать, что компилятор не порядок доступа к памяти.

Объекты, которые были объявлены как volatile не используется в некоторых способа оптимизации, поскольку их значения можно изменить в любое время.Система всегда считывает текущее значение изменяемого объекта при ее запросе, даже если в предыдущей инструкции попросила значения из одного и того же объекта.Кроме того, значения объекта записывается непосредственно в назначении.

ISO совместимы

Если вы знакомы с ключевым словом Volatile C#, или близким другом с расширением функциональности volatile в более ранних версиях Visual C, C-++, следует принять во внимание, что ключевое слово volatile снадарта ИСО (Международная организация стандартизации) C ++11 другое и поддерживается в Visual Studio, если параметр компилятора /volatile: ISO определен.(Для ARM, он определен по умолчанию).Ключевое слово volatile в коде снадарта ИСО (Международная организация стандартизации) C ++11 использовались только для доступа оборудования; не используйте его для взаимодействия между потоками.Для взаимодействия между потоками используйте механизмы такие как std::atomic<T> из Стандартная библиотека C-++ шаблонов C.

Только для систем Microsoft

Если параметр компилятора /volatile:ms использовать- по умолчанию при архитектуры, кроме ARM предназначены - компилятор создает дополнительный код для сохранения порядка между изменяемым ссылок на объекты в дополнение к поддержке упорядочение глобальных к ссылкам на другие объекты.В частности:

  • Запись в изменяемому объект (также известное как зависимое записи) имеет семантику выпуска; то есть ссылку на глобальный или статический объект, который происходит до записи изменяемому объект в последовательности инструкций, ранее, зависимое записывает в компилированном бинарный.

  • Чтение изменяемого объекта (также известного как чтение) имеет зависимое получить семантику; то есть ссылку на глобальный или статический объект, для которого возникает после чтения испаряющей памяти в последовательности инструкции далее тем, зависимое чтение в компилированному бинарный.

Это позволяет изменяемые объекты использовались для памяти блокирует и выпуски в многопоточных приложениях.

ПримечаниеПримечание

Если оно основывается на улучшенной гарантии, которая предоставляется при используется параметр компилятора /volatile:ms, код не будет.

См. также

Ссылки

Ключевые слова C++

const (C++)

const и volatile указатели