【问题标题】:Meaning of a stack overflow in C programming [duplicate]C编程中堆栈溢出的含义[重复]
【发布时间】:2014-10-09 06:04:03
【问题描述】:

下面是代码:

#‎include ‬<stdio.h>

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

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

【问题讨论】:

标签: c stack-overflow


【解决方案1】:

它是哪个内存?

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

溢出的堆栈大小是多少?

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

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 2023-03-15
    • 1970-01-01
    • 2012-09-22
    • 2014-12-28
    • 2012-12-20
    • 2011-03-02
    • 2014-01-17
    相关资源
    最近更新 更多