[uquote="ПростоНуб",url="/forum/viewtopic.php?p=4657831#p4657831"]Но спецификатор const не должен влиять на область памяти, в которой эта переменная находится и на машинный код, который используется для доступа к этой переменной.
В одном модуле может выделяться память для переменной со спецификатором const (или даже const volatile), а в другом модуле - содержаться функция, модифицирующая эту переменную, как extern. Например, вычисляя какие-то калибровочные значения.
Получается, что если для каких то модулей глобальная переменная может модифицироваться, а для каких-то - нет, то указанные Вами компиляторы, в разрез стандарту, не позволяют это указать.[/uquote]
Вы же сами выше написали, что модификатор const в стандарте запрещает модификацию переменных, следовательно не должно быть никаких функций в других модулях этой модификацией занимающихся, разве что вы сами собираетесь нарушать стандарты. Можно, конечно, взять указатель, привести его к неконстантному и записать новое значение, но с непредсказуемым результатом. В VS, например, я в таком случае ловлю эксепшен. Вариантов всего два: или инициализируем const переменную константным значением, или вычисляемым в рантайме.
Код: Выделить всё
int calcVar() { return GPIOA->IDR; }
const int gvar = 10;
const int gvar2 = calcVar();
Если посмотреть на адреса, то gvar оказалась во флеше, а gvar2 - в RAM. Если calcVar() будет в другом модуле и компилятор не сможет понять свернется она до константы или нет, то переменная пойдет в RAM.
Добавлено after 9 minutes 5 seconds:
[uquote="shonty",url="/forum/viewtopic.php?p=4657715#p4657715"]Это издержки ЯВУ видимо.. Не все конечно, но некоторые погружаются в такую беспробудную виртуализацию

, что не воспринимают физическое существование объекта

[/uquote]
У меня есть более простая теория, но по этическим причинам ее лучше не озвучивать )