在大多数托管语言(即具有 GC 的语言)中,超出范围的局部变量是不可访问的,并且具有更高的 GC 优先级(因此,它们将首先被释放)。
现在,C 不是托管语言,这里超出范围的变量会发生什么?
我在 C 中创建了一个小测试用例:
#include <stdio.h>
int main(void){
int *ptr;
{
// New scope
int tmp = 17;
ptr = &tmp; // Just to see if the memory is cleared
}
//printf("tmp = %d", tmp); // Compile-time error (as expected)
printf("ptr = %d\n", *ptr);
return 0;
}
我用 GCC 4.7.3 编译,上面的程序打印出来了17
,为什么?何时/在什么情况下会释放局部变量?