输入语句块时会创建一个新的堆栈框架吗? [复制]
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】:也许吧。也许不是。语言不需要它,所以编译器可以随意做任何事情。
【讨论】:
以上是关于输入语句块时会创建一个新的堆栈框架吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
操作系统:为什么IO操作不占用CPU却会导致进程阻塞?Web服务器每接收一个请求都会创建一个新的线程吗?Tomcat服务器工作原理?