【发布时间】:2022-06-10 17:37:18
【问题描述】:
大括号是否总是暗示堆栈帧。示例 1:
{
int b;
}
显然会创建一个堆栈帧。那么例子2:
<some code>
{
int a;
<some more code>
}
<yet more code>
我假设会有一个堆栈框架来反映a 的范围。
示例 3:
for (i=0; i<10; i++)
{
<single statement of code>
}
是否为i 的范围创建了堆栈帧?
示例 4:
在代码方面使用它是否更有效:
for (i=0; i<10; i++)
<single statement of code>
一般来说,我的问题是编译器是否总是在使用花括号时创建堆栈帧,还是使用智能并仅在需要时创建它们?
[如果我对堆栈帧的了解似乎有点简单,我将回到 30 年前的学位,对此深表歉意]
【问题讨论】:
-
.NET 调用堆栈适用于方法调用。至于效率,3 和 4 之间的区别在于 IL 中的几个额外的 nop 调用。 SharpLab.
标签: c# scope compiler-optimization stack-frame