C编程中堆栈溢出的含义

Meaning of a stack overflow in C programming

本问题已经有最佳答案,请猛点这里访问。

下面是代码:

1
2
3
4
5
6
7
#?include ?<stdio.h>

int main()
{
  printf("Stack Overflow");
  main();
}

编译并执行此程序后,它将打印"堆栈溢出",直到堆栈溢出。在这里,我知道堆栈溢出意味着什么,这意味着它将一直打印到内存满为止。我的问题是它是哪种记忆?溢出的堆栈的大小是多少?


which memory is it?

它是堆栈内存,即程序在函数调用过程中用来存储关于返回位置的信息的内存。每次调用函数时,CPU都会将当前正在执行的操作的位置保存到堆栈上,然后跳到新函数。函数完成后,它会从堆栈中弹出该位置并返回到该位置。这就是使递归成为可能的原因。

What is the size of stack that is overflowing?

堆栈的实际大小完全依赖于平台。许多操作系统倾向于将堆栈的大小限制为几兆字节,但允许更改该大小。如果系统的虚拟内存不足,这也会限制堆栈的大小。一些(很多)较旧的CPU具有固定大小的堆栈(Intel8008只有7个堆栈项)。