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