Другие ответы подчеркивали важность volatile
здесь, и мне нечего добавить к этому.Однако я хочу сказать, насколько важно, чтобы такая конструкция существовала, потому что она полезна .Исходя из моего опыта проектирования аппаратного обеспечения, много раз интерфейс между процессором и логическим блоком в HW основывался на записи и чтении памяти.Это означает, что когда ЦП читает какой-либо регистр из HW, что-то происходит (то есть, очищение прерываний, продвижение очереди и многие другие параметры).
Теперь, когда вы выполните доступ к pleaseOptimizeMeOut
, так как он volatile
, компилятор просто предполагает, что вы могли сделать это только для побочного эффекта , так что это будет абсолютно неправильнооптимизировать это.Предположим, переменная сопоставлена с HW-очередью, и вы просто хотели продвинуть очередь без фактического получения значения из нее.
Тем не менее, отображение переменных в регистры, когда чтение имеет побочные эффекты, ИМХО не является хорошей практикой, и было бы лучше инкапсулировать их с помощью вызова функции, именно по той причине, что ваш вопрос демонстрирует - это сбивает с толку в некоторыхслучаи.
Отображение переменных в регистры без побочных эффектов очень полезно и, тем не менее, .