在输入一个语句块时是否会创建一个新的Stack Frame?

时间:2012-01-19 13:45:46

标签: c++ c

  

可能重复:
  In C, do braces act as a stack frame?

int main()
{
   int i=10;

   {
       int i=100;
       printf("%d", i);
   }
}

内部“{”和“}”会创建一个新的堆栈帧吗?

3 个答案:

答案 0 :(得分:6)

这完全取决于实现,但对于那里的实现,答案是否定的。两个i变量通常由同一堆栈帧中的两个单独变量实现,但在这种特殊情况下,第一个i可能会被完全省略。

只有在调用子例程时才需要创建堆栈帧(在i386上)(即使它仅用于返回地址)。在您的情况下不会发生这种情况。

答案 1 :(得分:2)

只有编译器感到痒。当然不涉及语言要求。更具体地说,我想不出有任何理由说任何编译器都会在这里推动框架的冲动,除非为大量本地人优化存储。编译器完全能够在没有运行时帧的情况下管理名称。

答案 2 :(得分:1)

也许。也许不是。该语言不需要它,因此编译器可以随意做任何事情。