代码之家  ›  专栏  ›  技术社区  ›  user2650277

为什么cpython中会发生stackoverflow[重复]

  •  -1
  • user2650277  · 技术社区  · 7 年前

    这个问题已经有了答案:

    目前,python的递归深度为1000,但我无法理解为什么存在限制,因为堆中的所有内容都位于堆中。

    python中的内存管理涉及一个私有堆,其中包含 python对象和数据结构。这个私人的管理 堆由python内存管理器在内部确保

    避免stackoverflow的一种常见方法是声明自己的堆栈并使用循环,但在这种情况下,我们已经在使用堆了,它是由python内存管理设置的限制吗?.

    1 回复  |  直到 7 年前
        1
  •  2
  •   Tim Peters    7 年前

    CPython 是在C中实现的,虽然Python的数据是从堆中分配的,但是实现中的本机C函数调用层必须使用平台C的堆栈。例如,深度的递归调用 R 在python代码中,在运行时至少会导致对c函数的调用 R 在C实现中。

    所以这主要不是关于数据,而是关于调用堆栈深度。在C中实现Python的方式不那么直接依赖于平台C的调用堆栈是可能的。例如,请参见“ Stackless Python “实验”。不过,这更为棘手,而且核心CPython实现不太可能采用这种方法。