2014-08-27 2 views
-4

Я хотел бы узнать, объявлена ​​ли переменная как изменчивая константа, может ли она быть изменена с использованием i/o или любых периферийных устройств? например: volatile const int input = 0; Также такая переменная может храниться там, где в памяти?Как представляется постоянная?

+2

Ваш вопрос непонятен. –

+0

@pranitkothari Нет, это просто слишком широко. –

ответ

1

Это просто до компилятора, с учетом любых ограничений, которые вводит соответствующий стандарт. Учитывая, что вы можете принять адрес константы и назначить ее указателю, вы можете предположить, что константа занимает память в этом экземпляре.

Но это на самом деле не означает, что константы хранятся в памяти. Компилятор мог бы полностью их оптимизировать, если при этом не было никаких побочных эффектов. Альтернативно, const char* foobar = "foobar" и const char* bar = "bar" могут даже не занимать непересекающиеся местоположения: попытка изменить либо (формально неопределенное поведение) была бы катастрофической. Использование volatile действительно подавляет некоторые оптимизации, но точное поведение по-прежнему зависит от компилятора.

5

Когда переменная определена как const, система принимает ее как переменную только для чтения. Переменная, значение которой не должно изменяться. Однако, определяя переменную как volatile, программист просит компилятор избежать оптимизации компилятора.

Давайте рассмотрим пример: volatile const int flag = 0;

Это говорит flag переменная, значение которой не должно быть изменено и попросить компилятор, чтобы избежать оптимизации компилятора, значение, что указывает на компилятор, что значение флага может быть изменен во время работы другим системным процессом.

Очень хорошим примером является регистр PSW или CPSR (статус состояния программы) в процессоре. Он доступен только для чтения пользователю (пример const) и может быть изменен только системой, если система выполняет арифметическую или логическую операцию (пример volatile).

Надеюсь, это поможет.

+0

+1 да это делает. «предлагая компилятору, что значение флага может быть изменено во время работы каким-то другим системным процессом», особенно хорошо. – Bathsheba

+0

@AhmedNour Пожалуйста, отредактируйте свой вопрос и будьте более конкретным и добавьте детали, чтобы сузить набор ответов, чтобы можно было дать лучший ответ. Не так хорошо задавать такой широкий вопрос, когда у вас будет много хороших ответов и ответов, которые могут отклоняться от фактического требования. ** Просто предложение, поскольку вы новичок в SO. ** – iqstatic

Смежные вопросы