为什么堆栈内存大小如此有限?
在堆上分配内存时,唯一的限制是可用 RAM 的可用性。相比之下,为线程分配的堆栈内存的大小通常受到更多限制,约为 1 MB。这个限制回答了一个问题:为什么我们不能在堆栈上创建任意大小的对象?
技术约束:连续内存分配
堆和堆之间的主要区别堆栈内存的分配在于管理。堆栈必须存储在连续的内存位置,这意味着它不能根据需要任意分配。相反,系统必须为此目的保留虚拟地址。
线程创建限制
保留的虚拟地址空间的大小直接影响可以创建的最大线程数。被创建。例如,在具有 2GB 虚拟地址空间的 32 位应用程序中,2MB 堆栈将线程限制限制为 1024 个线程。此限制对于 Web 服务器等应用程序尤其具有限制。
64 位平台上的遗留注意事项
虽然 64 位平台提供了更大的虚拟地址空间,但堆栈尺寸限制已被保留。这可能是由于已建立的最佳实践以及缺乏对大规模堆栈的需求。鼓励开发人员在堆上分配大对象,并在绝对必要时手动调整堆栈大小。
以上是为什么堆栈内存大小如此有限,而堆内存却不受限制?的详细内容。更多信息请关注PHP中文网其他相关文章!