块本地变量存储在哪里(堆栈,堆或其他地方)?
int foo() {
int j; /*local variable*/
for(...) {
int i; /* block local variable*/
}
}
如果j
和i
都存储在堆栈中,我们如何区分它们。也就是说,我们如何将for
范围与外部函数范围分开?
答案 0 :(得分:3)
“范围”是一种语言特征,意味着变量仅在周围代码块的边界内可见并且存在于其中(此处:围绕{}
)。
“Stack”是一种计算架构功能,允许调用函数,在自己的寄存器集上运行,然后,从这些函数返回时,恢复在函数之前保存的原始计算状态调用
因此,这两个概念彼此正交。 C ++根据范围定义哪些变量可访问(或达到其生命周期的结束);编译器为函数调用添加了堆栈框架。