栈空间是不是只有在函数返回时 SP 上移才会释放? For 循环内部创建的变量,会在下一次循环时被覆盖还是不断堆叠在栈里?换句话说,如果没有函数调用,无限 for 循环创建局部变量,会不会导致 stack overflow ?测试结果是不会,似乎 for 循环内的变量都是同一地址,是编译优化还是本就如此?
刚开始想觉得有意思,不过是不是有 BUG ?”无限 for 循环创建局部变量“你这个怎么做到? ```c for (int i = 0; i < 3; ++i) { int a; int b; } ``` 这样么?这样可不是无限创建局部变量,只有 2 个局部变量,那就是 a b,一方面是有块级作用域的语言像 C/C++,int a 、int b 在一次 for 循环结束时应该就释放了空间,然后下一次再给栈空间,这样是无法做到 stackoverflow 的;另一方面像没有块级作用域的语言如 PHP/Python/JS 等,那每次 for 循环应该就是(重新)赋值罢了。