У меня много постоянных массивов, определенных в нескольких функциях. Что-то вроде следующего:
const float values[4] = {-4312.435f, -432.44333f, 4.798, 7898.89};
После проверки выхода gcc-ассемблера я заметил, что эти константы генерируются при каждом запуске функций. Это довольно неэффективно. Я подозреваю, что это связано с тем, что спецификация C/С++ говорит, что даже если данные const
, компилятор не может предположить, что он не будет изменен (например, через const_cast). Можно ли заставить gcc думать иначе?
Я хочу, чтобы эти константы определялись внутри тел функций, потому что они довольно сложны. Сохранение констант вблизи того места, где они используются, помогает в ремонтопригодности.
ИЗМЕНИТЬ
К сожалению, даже когда константы определены static
, они обновляются на каждом прогоне. Я использую -O3, если это помогает.
EDIT2
Хорошо, извините за первое редактирование, мне нужно исследовать дальше. Кажется, что определенная настройка ранее каким-то образом не позволяла gcc инициализировать константы без их регенерации.
EDIT3
Проблема была в моей тестовой папке, где я определил два массива рядом, но один из них должен был быть сгенерирован. Затем ассемблер ввел меня в заблуждение. Извините еще раз и спасибо!