在 x86_64 上不需要拆分堆栈?
运行时模型中拆分堆栈的主题引发了关于它们在 64 位架构上的必要性的问题,例如x86_64。有些意见认为,由于可用的地址空间扩大,不再需要拆分堆栈。
问题1的回答:意见的解释
是的,引用的意见这个问题意味着在 x86_64 架构上不需要拆分堆栈。 32 位系统上提到的“数百万线程”和“狭窄用例”表明 64 位系统的大地址空间可以容纳足够数量的堆栈范围。
答案问题 2:不必要的理由
由于虚拟地址空间明显更大,64 位架构上不再需要拆分堆栈。这允许每个堆栈拥有一个专用且相当大的地址范围,可与整个 32 位地址空间相媲美。
在现代平面内存模型中,硬件内存管理单元 (MMU) 将虚拟地址转换为物理地址记忆位置。在 x86_64 上,为每个堆栈分配大块虚拟地址空间并仅将初始页面映射到实际 RAM 被发现效率更高。
这种方法允许堆栈使用连续的虚拟地址根据需要增长和缩小地址。当堆栈增大或缩小超过指定阈值时,操作系统可以重新配置 MMU,以将虚拟内存的附加页面映射到实际内存。
通过仔细选择这些阈值,堆栈可以像具有 O(1 ) 平均堆栈操作复杂度。它们保留了支持数百万个堆栈的优势,这些堆栈可以增长到任意大小,同时仅消耗它们使用的内存。
以上是x86_64 架构上是否需要拆分堆栈?的详细内容。更多信息请关注PHP中文网其他相关文章!