Добрый день,C++ глобальные константы в ОЗУ не ПЗУ
Я заметил, что, когда у меня есть следующий код:
int foo(const int arg){
return arg*10;
}
const int MY_VAR = foo(10);
main(){
while(true){
}
}
Тогда my_var помещается в секции RW данных (RAM). Честно говоря, я ожидал ошибку компилятора. Я использую версию GNU ARM 6.2 2016q4.
Если я создаю MY_VAR constexpr, тогда я получаю ошибку компилятора. Если я создам foo constexpr, то, как и ожидалось, MY_VAR помещается в .text-раздел (т. Е. В ПЗУ).
Поскольку переменные constexpr не могут использоваться как extern, мне придется использовать константные переменные для действительно глобальных констант.
Какие способы, которыми я могу автоматически (например, предупреждение или ошибка компилятора) обнаружить, что константа не назначена ПЗУ?
Я хочу использовать возможность инициализации некоторых глобальных констант с функциями. Хотя я бы хотел поймать случаи, когда функция не constexpr автоматически.
константа 'MY_VAR' является глобальной. он выделен в ОЗУ – Raindrop7
Кстати, вы попробовали атрибут ['section'] (https://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Variable-Attributes.html)? Возможно, вы захотите изменить свой вопрос и уточнить, хотите ли вы помочь в его использовании; или, возможно, вы хотите альтернативное решение. – anatolyg
ПЗУ не совпадает с разделом ОЗУ для чтения. – molbdnilo