Объект времени выполнения и объект времени загрузки

В чем разница между объектом времени выполнения и объектом времени загрузки. И почему 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() и т.п.

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

Другие вопросы по тегам