В C или C ++ не существует такой вещи, как запись в ячейку памяти. Есть только код и память с компилятором, решающим, читать или записывать в память, чтобы заставить код делать то, что требуется от кода, как он считает необходимым. Ваша платформа может заставить volatile
делать то, что вы хотите, а может и нет, но это вопрос для конкретной платформы.
Если вы пишете j=1;
, и у вас есть платформа, где константы, отличные от нуля, дороги, но приращения дешевы, реализация может воспринимать это как j=0; ++j;
, если захочет.
Были даже случаи из реальной жизни, когда операции, которые выглядели как чистые операции чтения, действительно записывали в память. Ничто в стандартах C и C ++ не запрещает этого.
Вы можете проверить документацию вашего компилятора в volatile
, чтобы увидеть, делает ли он то, что вам нужно. Если нет, посмотрите встроенный код сборки. Если это что-то разумное сделать на вашей платформе, достойный компилятор должен предоставить хороший способ сделать это.