Где хранится значение инициализированной локальной переменной перед стеком в C? - PullRequest
0 голосов
/ 13 мая 2018

У меня есть вопрос о локальных переменных. Мне хорошо известно, что во время вызова функции память для переменной выделяется, и после возврата из функции память освобождается. Но откуда программа знает, какое значение использовать при инициализации?

void foo()
{
  uint8_t x = 2u;
}

Итак, мой вопрос: где значение 2 хранится в памяти перед вызовом функции? Я предполагаю, что он находится в текстовом сегменте (в энергонезависимой памяти) и читается оттуда в стек.

Спасибо за ответы.

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Конечно, дело за компилятором, но как бы то ни было, все будет примерно так же, как если бы вы присвоили значение переменной в выражении. То есть, если вы скажете

void foo()
{
    uint8_t x = 2u;
}

это как если бы ты сказал

void foo()
{
    uint8_t x;    /* uninitialized */
    x = 2u;
}
0 голосов
/ 13 мая 2018

Компилятор принимает решение.

Значение может даже не храниться где-либо: для некоторых констант (например, ноль) проще просто генерировать код для вычисления значения по требованию, а не копировать его из любого места.

...