Как заставить GCC помещать константы в память, а не генерировать их?

у меня есть много постоянных массивов, определенных в нескольких функциях. Примерно так:

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

Проблема была в моем тестовом примере, где я определил два массива рядом, но один из них должен был быть сгенерирован. Затем ассемблер ввел меня в заблуждение. Еще раз извините и спасибо!

15
задан 18 February 2011 в 19:12
поделиться