我坐在课堂上,经验丰富的老师告诉我,以下代码将STACK memory在程序完全填满时终止.现在我无法理解为什么?以下是源代码: -
#include<stdio.h>
int main()
{
char i;
for (i = 120; i < 130; i++)
printf("\n%d", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,我觉得这个循环不会终止的原因是因为一旦程序运行,变量就会在一个内存位置声明,直到程序的生命周期才会改变,我们只是改变已经声明的变量的值.所以,我想问一下这个问题的答案.另外,如果您认为老师是对的,请解释一下:)
此外,我尝试运行该程序很长一段时间,但内存消耗没有增加甚至一点:|
glg*_*lgl 10
程序的操作取决于您的实现如何定义char:它可以是有符号或无符号类型.
如果它是无符号的,则输出10个数字并终止.
如果它已签名,则在大多数实现中,它将在127处换行,下一个值为-128.但根据标准,它是未定义的行为.
我不明白为什么它应该占用完整的堆栈 - 没有递归和没有额外的内存分配,所以
由一位非常有经验的老师告诉我,以下代码将
STACK memory在程序完全填满时终止
意思是"从不" - 因为它只是没有填满堆栈.它不可能是一个经验丰富的程序员/老师 - 或者OP不是一个经验丰富的听众,并且误解了老师告诉他的事情.