memory-management - 溢出堆栈是其实现的一部分,还是只是受操作系统的内存/RAM约束限制的东西?
问题描述
当您听到堆栈溢出时,这是否意味着堆栈最初的容量为 1mb,然后您添加了更多项目...增加了它的大小,所以堆栈的大小被调整为 2mb...然后继续,直到它被调整为 10mb ...但是由于堆栈具有最大容量大小,它永远无法调整到 11mb ?
还是堆栈级别没有这样的限制,而是限制来自app/program。并且该限制可能会因多种原因而波动。例如,如果您的 iPhone 内存不足,那么它只允许 10mb 的堆栈,但是如果它有 1Gb 的可用内存,那么应用程序将能够使用所有这些空间,因此最大堆栈容量将接近 1Gb?
我的问题与链接的问题不同。这与应用程序的调用堆栈无关。相反,它纯粹是关于谁将取下溢出的堆栈?并表明这是堆栈实现的一部分还是什么?
解决方案
根据安迪提供的评论,
无论您在哪里有限制,都可以从那里抛出错误。堆栈没有限制或抛出错误的特定约定。虽然它可以做到这一点。
操作系统也可以施加不同的限制:
- 虚拟机限制
- 操作系统对单个应用程序的限制
推荐阅读
- docker - 绑定:无法在 Docker 中分配请求的地址
- node.js - Docker 上的 Angular:堆限制附近的无效标记压缩分配失败 - JavaScript 堆内存不足
- c++ - 创建一个字符串流副本
- javascript - 如何使用 NodeJS 提供多个 html 文件
- sql - 在 SQL 中捕获 200 天的支出窗口开始日期
- c - 如果它是零,我们为什么要乘以 10
- javascript - 拒绝加载图像“http://localhost:5000/favicon.ico”
- php - Codeigniter 事务未捕获错误
- c# - Unity - 精灵在场景视图中消失,但不是游戏视图
- ios - Mapbox:仅当注释在屏幕上可见时才添加注释