输入语句块时会创建一个新的堆栈框架吗? [复制]

Posted

技术标签:

【中文标题】输入语句块时会创建一个新的堆栈框架吗? [复制]【英文标题】:Will a new Stack Frame be created on entering a block of statements? [duplicate] 【发布时间】:2012-02-14 04:09:06 【问题描述】:

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

int main()

   int i=10;

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

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

【问题讨论】:

你可以试试看[THIS][1] 挺清楚的。 [1]:***.com/questions/2759371/… @DonCallisto 仅供参考,在 cmets 中,您可以创建如下链接:[link_title](http://link-url/) - 这也适用于问题。 @RichardJ.RossIII 感谢您提供信息 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于输入语句块时会创建一个新的堆栈框架吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 async/await 会创建一个新线程吗?

操作系统:为什么IO操作不占用CPU却会导致进程阻塞?Web服务器每接收一个请求都会创建一个新的线程吗?Tomcat服务器工作原理?

一个高频问题:异步操作会创建线程吗?

使用 mongoose 保存子文档数组会创建空数组 MEAN 堆栈

为啥 Flask 应用程序会创建两个进程? [复制]

为啥编译包含静态嵌套类的类会创建一个名为“EnclosureClass$1”的新 .class 文件? [复制]