C 如果不是手动插入,无限循环何时终止?
我能访问的唯一一台计算机是我班上所有计算机中的一台,所以我无法尝试这个程序C 如果不是手动插入,无限循环何时终止?,c,while-loop,infinite-loop,terminate,C,While Loop,Infinite Loop,Terminate,我能访问的唯一一台计算机是我班上所有计算机中的一台,所以我无法尝试这个程序 while (1) printf ("I am Printing\n"); 我一个人呆了这么长时间。但我很想知道,如果我们让无限循环永远运行,无限循环何时终止 操作系统会转储程序还是会一直运行到电源关闭(通过清除旧的输出),或者类似的事情?它会一直运行到有东西停止它。如果你不停止,当停电时,或者当一辆卡车撞到你的大楼并损坏电脑时,或者当你的狗绊倒电源线并把它从墙上拉出来时,它就会停止 注意:您可以创建最终将停止
while (1)
printf ("I am Printing\n");
我一个人呆了这么长时间。但我很想知道,如果我们让无限循环永远运行,无限循环何时终止
操作系统会转储程序还是会一直运行到电源关闭(通过清除旧的输出),或者类似的事情?它会一直运行到有东西停止它。如果你不停止,当停电时,或者当一辆卡车撞到你的大楼并损坏电脑时,或者当你的狗绊倒电源线并把它从墙上拉出来时,它就会停止 注意:您可以创建最终将停止的循环,例如:
while (1)
{
char *p = malloc(128); // allocate some memory
*p = 1;
}
最终会耗尽内存并崩溃(malloc
将返回NULL,而*NULL通常会崩溃[尽管有些类型的计算机不会这样做])。你也可以写:
int counter = 0;
while (1)
{
counter++;
if (counter == 10000)
break;
}
这并不是无限的,因为它只会循环10000次,即使它有while(1)
不过,您的程序不是这两个。这是一个真正的无限循环,不会崩溃。(请注意,打印到屏幕不会耗尽内存,因为旧文本会被丢弃)
如果用户这样设置,程序可能会停止。如果他们在Linux上,他们可以运行/your|u program | head-n10
,它将打印前10行,然后在试图打印更多行时终止程序。或者他们可以运行timeout 10./your_程序
,这将在10秒后杀死该程序
但是,如果没有任何东西使您的程序停止(不在程序中,也不由用户执行),它将不会停止。它将一直运行,直到电源关闭(通过清除旧的输出),或者类似的事情 如果您的终端将屏幕上的所有文本存储在内存中,它将一直运行,直到外壳内存耗尽并被OOM杀手杀死
如果您的终端将文本存储在磁盘上,它可能会一直运行,直到终端的磁盘空间用完为止(然后可能还会继续运行)。我不明白为什么操作系统会特别停止这个程序。操作系统可能会抱怨它没有响应,如果你的shell尝试存储所有文本,它将耗尽内存(但通常不会)。它永远不会…@Blaze是的,我确实想知道如果我的shell尝试存储所有文本,并且如果内存耗尽,会发生什么情况。这取决于shell,那么。它们中的大多数存储一定数量的行。之后,他们开始丢弃旧的线条。在这种情况下,程序不会因外壳内存不足而停止。您可以始终将
while(1)
与while(fork())
交换。