Я читал о том, что константные переменные, объявленные в глобальной области видимости, хранятся в .rodata. что я теперь понимаю, это данные только для чтения. Часто, видимо, хранится в ПЗУ.
Я начал читать о шаблонном метапрограммировании на C ++. поэтому я сначала задаюсь вопросом, почему он должен быть в .rodata или статической константой, такой как
template<int N>
struct is_even<N>{
static const bool value = N % 2 == 0;
}
почему он должен быть статическим const?
и что это покупает меня?
Каково значение нахождения в .rodata?
Каково значение того, чтобы быть так называемым ROMable?
Я понимаю шаблоны, так как это похоже на дженерики в C #, который я использую. Но только намного более мощный.
Я пытаюсь понять, почему эти ограничения необходимы и что компилятор делает с ними при оценке моей программы.
Любые ссылки и ссылки приветствуются.
блэр
Не обязательно иметь константные переменные в ПЗУ или в любом другом месте. Это деталь реализации. Некоторые компиляторы могут размещать их в ПЗУ, а другие нет.
Компилятор должен только гарантировать, что правильно сформированные программы на C ++ всегда получают объявленное значение при обращении к такой переменной.
В некоторых системах имеется большое количество доступного ПЗУ и мало ОЗУ. Примером такой системы является Nintendo DS, которая имеет 4 МБ ОЗУ, но объем находится в картридже, который может достигать сотен МБ. В таких системах вы должны по возможности помещать все в ПЗУ и резервировать ОЗУ только для переменных, которые действительно меняются во времени; потому что оперативной памяти мало, а ROM нет. Таким образом, выгода здесь в том, что программа подходит, но если вы поместите константные переменные в ОЗУ, она может не подойти.
Других решений пока нет …