C编程中堆栈溢出的含义[重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

以下是代码:

#‎include ‬<stdio.h>

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

编译并执行该程序后,它将打印“Stack Overflow”直到其堆栈溢出。在这里,我知道堆栈溢出意味着什么,这意味着它将打印直到内存已满。我的问题是它的记忆力是什么?堆栈溢出的大小是多少?

c stack-overflow
1个回答
8
投票

它的记忆力是什么?

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

堆栈的大小是多少?

堆栈的实际大小完全取决于平台。许多操作系统倾向于将堆栈的大小限制为几兆字节,但允许更改该大小。如果系统用完虚拟内存,这也会限制堆栈大小。一些(很多)较旧的CPU具有固定大小的堆栈(Intel 8008仅具有7个堆栈条目)。

© www.soinside.com 2019 - 2024. All rights reserved.