2015-02-09 51 views
0

块本地变量存储在哪里(堆栈,堆或其他地方)?在C++中阻止局部变量

int foo() { 
    int j; /*local variable*/ 
    for(...) { 
    int i; /* block local variable*/ 
    } 
} 

如果两个ji被存储在堆栈中,我们如何区分它们。即,我们如何将for范围与外部函数范围分开?

+1

通常在堆栈或寄存器中。 – 2015-02-09 08:39:01

+2

C++还是Java?他们是不同的语言。 – 2015-02-09 08:40:31

+1

@余浩:实际上并不重要;范围和堆栈在这里是两个不同的东西。 “我”在“for”之外是不可见的,所以我不知道OP究竟在问什么。 – 2015-02-11 15:46:06

回答

3

“范围”是一种语言功能,这意味着变量只能看到并生活在周围代码块的边界内(此处为:围绕{})。

“堆栈”是一种计算体系结构功能,它允许调用函数,在它们自己的一组寄存器上运行,然后从这些函数返回时恢复计算的原始状态,如同在函数调用。

因此,这两个概念是相互正交的。 C++根据范围定义哪些变量是可访问的(或者达到其生命周期的末尾);编译器根据函数调用的需要添加堆栈分帧。