Пример 'volatile', препятствующий оптимизации компилятора в C #? - PullRequest
6 голосов
/ 19 февраля 2010

Насколько я понимаю, модификатор 'volatile' в C # имеет два эффекта:

  1. Вставляет ограждения по мере необходимости для целевого процессора
  2. Предотвращает некоторые оптимизации компилятора

На x86 / amd64 (1) не имеет значения. Эти процессоры не требуют ограждений для изменчивой семантики. (ia64 отличается, однако.)

Итак, мы до (2). Но для примеров, которые я пробовал, volatile не имеет никакого значения для Jit-Ted сборки.

Мой вопрос таков: можете ли вы привести пример кода на C #, в котором добавление модификатора 'volatile' к полю приводит к разному Jit-ассемблерному коду?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2010

Может быть это - это то, что вы ищете.

1 голос
/ 19 февраля 2010

У Марка Гравелла есть повторяемый пример того, как отсутствие летучего ключевого слова может вызвать проблемы.

Здесь также обсуждается .

Стоит отметить (как это делает Марк), что оптимизация компилятора видна только при компиляции в режиме Release.

...