问题:
虽然堆内存理论上可以分配到可用的 RAM,但为什么栈内存大小这么有限吗,一般在1MB左右?
答案:
与可以随机分配的堆不同,栈必须连续存储记忆位置。这意味着必须为堆栈保留很大一部分虚拟地址空间,即使它没有立即使用。
例如,在具有 2GB 虚拟地址空间的 32 位应用程序中,一个 2MB 堆栈size 将最大线程数限制为 1024。将堆栈大小增加到 100MB 会进一步将线程限制减少到大约 20。这对于 Web 服务器和 GUI 程序等应用程序来说可能会出现问题。
有趣的是,此限制还在 64 位平台上仍然存在。虽然技术原因尚不清楚,但推测开发人员已经习惯了堆栈最佳实践,例如避免在堆栈上分配巨大的对象以及在必要时手动调整堆栈大小。因此,64 位系统上“巨大”堆栈支持的必要性仍未被探索。
以上是尽管 RAM 理论上可用于堆内存,但为什么堆栈内存大小通常限制在 1 MB 左右?的详细内容。更多信息请关注PHP中文网其他相关文章!