gpt4 book ai didi

c - 在 C 中,大括号是否充当堆栈框架?

转载 作者:IT王子 更新时间:2023-10-28 23:28:15 27 4
gpt4 key购买 nike

如果我在一组新的大括号中创建一个变量,该变量是在右大括号上从堆栈中弹出,还是一直挂到函数结束?例如:

void foo() {
int c[100];
{
int d[200];
}
//code that takes a while
return;
}

d 会在 code that takes a while 部分占用内存吗?

最佳答案

不,大括号不充当堆栈框架。在 C 中,大括号仅表示一个命名范围,但当控制权传递出去时,不会有任何东西被破坏,也不会有任何东西从堆栈中弹出。

作为编写代码的程序员,您通常可以将其视为堆栈帧。大括号内声明的标识符只能在大括号内访问,因此从程序员的角度来看,就像它们在声明时被压入堆栈,然后在退出范围时弹出。但是,编译器不必生成在进入/退出时推送/弹出任何内容的代码(通常它们不需要)。

还要注意,局部变量可能根本不使用任何堆栈空间:它们可以保存在 CPU 寄存器或其他一些辅助存储位置,或者完全优化掉。

因此,理论上,d 数组可能会占用整个函数的内存。但是,编译器可能会将其优化掉,或与其他使用生命周期不重叠的局部变量共享其内存。

关于c - 在 C 中,大括号是否充当堆栈框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com