在C中的堆栈之前存储的初始化局部变量的值在哪里?

时间:2018-05-13 19:29:37

标签: c variables stack local

我对局部变量有疑问。我很清楚,在函数调用期间,会分配变量的内存,并在从函数返回后释放内存。但程序从哪里知道在初始化期间使用什么值?

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

所以我的问题是,在调用函数之前,值2存储在内存中的哪个位置?我猜它是在文本段(在非易失性存储器中)并从那里读取到堆栈。

感谢您的回答。

2 个答案:

答案 0 :(得分:0)

编译器决定。

该值甚至可能不会被存储"任何地方:对于某些常量(例如零),只需发出代码来按需计算值,而不是从任何地方复制它。

答案 1 :(得分:0)

当然,这取决于编译器,但无论它是什么,它都会或多或少与您为表达式中的变量赋值一样。也就是说,如果你说

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

就像你说的那样

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