Если константа объявлена как статик, то компилятор понимает что она локальна в модуле или в процедуре.
И если компилятор видит что внутри этого модуля не происходит взятие адреса этой константы, то он её не создаёт.
Т.е. не занимает под неё память (получается почти полная аналогия с define в смысле отъедания памяти).
Если объявлена просто константа типа const float f; - то она займёт память (целых 4 байта).
Вообще у static я насчитал 3 различных смысла (хотя по правде их только два):
1) для "облегчения" констант
2) для сокрытия локальных процедур и переменных в модуле (+ развязывает руки компилятору по встраиванию таких функций как inline)
3) для локальных статических переменных внутри процедур с неограниченным сроком годности

Всем этим надо активно и умело пользоваться и размер Ваших программ сильно уменьшится, что Вы даже удивитесь

Возьмите за правило: если функция или переменная или константа не объявляется в заголоыочном файле как extern
(т.е. не используется за пределами единицы трансляции) то она должна быть static.
Помимо всего это ещё и дополнительное средство самодокументирования кода.