Объект времени выполнения и объект времени загрузки
В чем разница между объектом времени выполнения и объектом времени загрузки. И почему static
класс хранения является объектом времени загрузки?
Программа:
#include<stdio.h>
void main(){
int i=10;
static int x=i;
if(x==i)
printf("Equal");
else if(x>i)
printf("Greater than");
else
printf("Less than");
}
Вышеуказанная программа выдает ошибку времени компиляции. И почему мы не можем присвоить значение статической переменной x
через i
?
1 ответ
В вашем коде
static int x=i;
вызывает ошибку, быть причиной, в C
, const
переменная const
- не является постоянной времени компиляции. Вы можете использовать только постоянную времени компиляции для инициализации глобальной статической переменной.
Связанные с: C11
Глава §6.7.9
Все выражения в инициализаторе для объекта, который имеет статическую или потоковую длительность хранения, должны быть константными выражениями или строковыми литералами.
Тогда, чтобы ответить
разница между объектом времени выполнения и объектом времени загрузки
С точки зрения выделения памяти, распределение времени загрузки обрабатывается компилятором, а распределение во время выполнения - библиотечными функциями, такими как malloc()
, calloc()
, free()
и т.п.
Вы также можете обратиться к этому моему предыдущему ответу, чтобы узнать больше об этом.