Что касается C, то компилятору разрешено не выделять память, если эта память не нужна для реализации наблюдаемого поведения программы.Например, если у вас есть программа типа
int main( void )
{
int x;
int y;
y = some_value();
printf( "y = %d\n", y );
return 0;
}
, на переменную x
никогда не ссылаются, и она не играет никакой роли в вычислении или отображении y
(мы предполагаем, что она не видима для some_value()
).В этом случае компилятор может не выделять для него места.
Аналогично, в такой программе, как
int main( void )
{
int y = 0;
printf( "y = %d\n", y );
return 0;
}
, компилятор может определить, что это точно так же, как запись
int main( void )
{
printf( "y = 0\n" );
return 0;
}
, и не беспокоиться о выделении места для y
на всех.
У разных языков разные правила;если вам интересно, спросите об этом конкретном языке.