【问题标题】:CPython - Internally, what is stored on the stack and heap?CPython - 在内部,堆栈和堆中存储了什么?
【发布时间】:2010-03-01 02:18:56
【问题描述】:

在 C# 中,值类型(例如:int、float 等)存储在堆栈中。方法参数也可以存储在堆栈中。然而,大多数其他东西都存储在堆上。这包括列表、对象等。

我想知道,CPython 在内部做同样的事情吗?它在栈上存储什么,在堆上放什么?

【问题讨论】:

  • 我假设您的意思是 “然而,大多数其他内容都存储在 上。”
  • 您可能想说“CPython”,而不是“Python”。 Python是一种语言;只要实现符合 Python 要求的语义,它就没有意见应该将对象存储在哪里。 CPython 是大多数人使用的用 C 语言编写的 Python 的实现。下面来自 John Feminella 和 Alex Martelli 的答案都与 CPython 有关。 PyPy、Jython 和 IronPython 对存储对象的位置有自己的看法;遗憾的是我对他们一无所知。
  • @BlueRaja - 谢谢,很好。

标签: python memory-management


【解决方案1】:

CPython 实现中的所有 Python 对象都在堆上。您可以在文档中详细阅读 Python 的内存管理是如何工作的here

Python 中的内存管理涉及一个私有堆包含所有 Python 对象和数据结构。此私有堆的管理由 Python 内存管理器在内部确保。 Python 内存管理器具有处理各种动态存储管理方面的不同组件,例如共享、分段、预分配或缓存。

请注意,Python 本身只是一种语言,并没有说明内存管理等内部机制应该如何工作;这是留给实施者的细节。

【讨论】:

    【解决方案2】:

    Python 的运行时只处理对对象的引用(它们都存在于堆中):Python 堆栈中的内容(作为其字节码操作的操作数和结果)始终是 引用(对存在的值)其他地方)。

    【讨论】:

    • 您能在what goes on Python's stack are always references 上解释更多或提供一些参考吗?
    猜你喜欢
    • 2012-11-18
    • 2012-01-31
    • 1970-01-01
    • 2020-10-17
    • 2013-12-06
    • 2018-08-08
    • 2011-10-21
    • 2011-06-13
    • 2016-10-12
    相关资源
    最近更新 更多