Во многих встроенных системах они имеют ОЗУ и некоторый тип постоянной памяти, часто называемой флэш-памятью (ее можно запрограммировать несколько раз, не снимая с печатной платы).
Простые встроенные приложения помещают исполняемые и доступные только для чтения разделы данных во Flash и выполняются из Flash.Переменные для чтения / записи помещаются в ОЗУ.Давайте рассмотрим эту модель для вашего примера фрагмента кода:
char * c = "Hello World!";
В приведенном выше операторе переменная c
находится в ОЗУ, поскольку по умолчанию для переменных задан доступ на чтение и запись.Если вы указали, что переменная является константой, она будет жить в ПЗУ {На самом деле она будет представлять местоположение в ПЗУ.}: Введите здесь код
char * const c = "Hello World!"; // A constant pointer that lives in ROM.
Компилятор немного обрабатывает текст "Hello World!"
более сложный.Фактический текст находится в ПЗУ, либо в исполняемой области, либо в области данных;зависит от переводчика.Многие компиляторы выделяют память в ОЗУ и копируют литерал в ОЗУ, а переменная c
указывает на копию в ОЗУ.Это потому, что литерал не был указан как константа.
Чтобы избежать копирования литерала в ОЗУ, объявите переменную, указывающую на постоянные данные:
const char * c = "Hello World"; // A pointer to constant data.
Приведенное выше определение все еще позволяет указателю указывать на разные вещи во время выполнения.Если вы хотите сослаться на один экземпляр текстового литерала во всей программе, объявите постоянный указатель на постоянные данные:
const * char * const c = "Hello World!"; // A constant pointer to constant data
Этот метод позволяет исполняемым файлам загружаться в ОЗУ (для более быстрого выполнения) и по-прежнему иметь доступ к чтению-только данные из ПЗУ (что освобождает SRAM для истинных переменных чтения / записи).
На большинстве ПК все живет либо в энергонезависимой памяти (жесткий диск, BIOS и т. д.), либо в ОЗУ.Обычный метод - загружать программы из ПЗУ (включая жесткий диск) и выполнять в ОЗУ.При загрузке исполняемого файла в ОЗУ ОС обычно загружает данные только для чтения в ОЗУ.Данные только для чтения могут быть защищены ОС, поэтому при записи приложения в эту область создается исключение.