堆栈溢出是其实现的一部分,还是只是受到 OS 的 memory/RAM 约束的限制?
Is overflowing a stack part of its implementation or that's just something that is restricted by the memory/RAM constraints of the OS?
当您听到堆栈溢出时,这是否意味着堆栈最初有 1mb 的容量,然后您添加了更多项目...增加了它的大小,因此堆栈的大小调整为 2mb...然后继续直到它被调整到 10mb...但是它永远无法调整到 11mb 因为堆栈有最大容量大小?
或者是在堆栈级别没有这样的限制,而是限制来自来自app/program。该限制可能会因多种原因而波动。例如如果你的 iPhone 内存不足,那么它只允许 10mb 的堆栈,但是如果它有 1Gb 的可用内存,那么应用程序将能够使用所有 space,因此最大堆栈容量将接近 1Gb?
我的问题与链接的问题不同。这与应用程序的调用堆栈无关。相反,它纯粹是关于谁将取下溢出的堆栈?并表明它是堆栈实现的一部分还是什么?
根据 Andy 提供的评论,
只要有限制,就可以从那里抛出错误。
堆栈没有限制或抛出错误的特定约定。虽然它可以这样做。
操作系统也可以施加不同的限制:
- 虚拟机限制
- 操作系统对单个应用程序的限制
当您听到堆栈溢出时,这是否意味着堆栈最初有 1mb 的容量,然后您添加了更多项目...增加了它的大小,因此堆栈的大小调整为 2mb...然后继续直到它被调整到 10mb...但是它永远无法调整到 11mb 因为堆栈有最大容量大小?
或者是在堆栈级别没有这样的限制,而是限制来自来自app/program。该限制可能会因多种原因而波动。例如如果你的 iPhone 内存不足,那么它只允许 10mb 的堆栈,但是如果它有 1Gb 的可用内存,那么应用程序将能够使用所有 space,因此最大堆栈容量将接近 1Gb?
我的问题与链接的问题不同。这与应用程序的调用堆栈无关。相反,它纯粹是关于谁将取下溢出的堆栈?并表明它是堆栈实现的一部分还是什么?
根据 Andy 提供的评论,
只要有限制,就可以从那里抛出错误。 堆栈没有限制或抛出错误的特定约定。虽然它可以这样做。
操作系统也可以施加不同的限制:
- 虚拟机限制
- 操作系统对单个应用程序的限制