Исходя из этого обсуждения , мне было интересно, всегда ли статическая переменная области действия функции использует память или компилятору разрешено оптимизировать это.Чтобы проиллюстрировать этот вопрос, предположим, что такая функция:
void f() {
static const int i = 3;
int j = i + 1;
printf("%d", j);
}
Компилятор, скорее всего, будет указывать значение i
и, вероятно, также выполнит вычисление 3 + 1
во время компиляции.Поскольку это единственное место, где используется значение i
, нет необходимости выделять статическую память.Так разрешено ли компилятору оптимизировать статическое удаление, или стандартное требование о выделении памяти для любой статической переменной?