Что такое механизм памяти только для чтения? - PullRequest
0 голосов
/ 14 мая 2018

В общей памяти может быть читаемым и доступным для записи. Когда компилятор C устанавливает память const, каков ее механизм? Кто блокирует записываемую память.

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Это операционные системы, которые помечают страниц из виртуальной памяти как читаемые, записываемые или исполняемые (или их комбинацию).

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

Ничто из этого не является частью стандарта C, который только указывает, что попытка изменить переменную const является неопределенным поведением.

0 голосов
/ 14 мая 2018

Компилятор и компоновщик реализуют его, например, в встраиваемой системе, данные в ОЗУ являются изменяемыми, в то время как данные во Flash / ROM не изменяются.

Так что, если данные определены с помощью const, они будутбыть помещенным в неизменяемое хранилище, например, Flash / ROM, диск.

Определение переменной с помощью const имеет два преимущества: - Избегайте изменения этой переменной из-за ошибки кодирования. (ошибка компилятора) - Сократите использование ОЗУНапример, длинный текст должен быть помещен во Flash / ROM или на диск.

0 голосов
/ 14 мая 2018

В стандарте C11 для постоянной памяти нет указанного механизма *1002*. Проверьте, прочитав n1570 . Но будьте напуганы из неопределенное поведение (например, запись в некоторые const данные).

На практике во многих реализациях C, работающих в текущих операционных системах (например, Linux, Windows, Android, MacOSX, ...) и настольных ПК, планшетах или серверах с x86-64 * Процессор 1015 * или ARM , процесс имеет некоторое виртуальное адресное пространство , с различными сегментами, некоторые из которых доступны только для чтения (и управляются операционной системой * 1022). * ядро ​​ с помощью MMU ). Читайте также о виртуальной памяти & ошибка сегментации . Потратьте несколько дней, чтобы прочитать книгу, подобную Операционные системы: Three Easy Pieces (можно загрузить бесплатно).

На встроенных микроконтроллерах (например, Arduino like) часть памяти может быть аппаратной ROM . И некоторые компиляторы могут (но не обязаны!) Использовать его для некоторых ваших постоянных данных.

Вы можете использовать сценарии компоновщика (с GNU ld) для организации некоторых сегментов только для чтения в постоянную память. Это очень зависит от реализации.

Однако некоторые платформы не имеют какой-либо программируемой пользователем постоянной памяти (например, некоторые встроенные системы имеют заводское ПЗУ, содержащее фиксированный загрузчик в прошивка , а все остальное в оперативке). YMMV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...