【问题标题】:Single, concise desription of Python's memory model/execution environment? [duplicate]对 Python 内存模型/执行环境的单一、简洁的描述? [复制]
【发布时间】:2016-07-21 13:26:49
【问题描述】:

当我学习 C/C++ 时,我不仅学习了语言的语法和语言结构的语义,还学习了计算机如何执行程序。我学到了类似的东西:

所有的局部变量都在栈帧中声明,栈帧被分配 每次调用该函数时。这些框架被布置在 一个接一个地调用堆栈,当 函数返回,从而快速有效地“破坏”本地 该函数的变量

这反过来又帮助我弄清楚为什么获取局部变量的地址并将其返回给调用函数是一个坏主意。换句话说,了解 C/C++ 的内存模型和代码执行环境有助于更深入地了解如何编写正确的程序。

另一个例子:malloc/new 在“堆”(而不是堆栈)中分配对象,这都解释了为什么它们存在于分配它们的函数的末尾。此外,知道这些函数/关键字返回对象所在的内存地址有助于我理解链表之类的东西是如何工作的。 (以及如何确定我是否需要另一个*->。)

所以现在我正在学习 Python,并且我正在寻找一个关于 Python 程序如何管理其内存和执行环境的简明、清晰、透彻的解释

在线搜索并不是特别有成效 - 我可能使用了错误的搜索词,但总体上似乎很少。

我浏览了https://docs.python.org/,发现它是一个很好的语法和语义资源(“如果你输入 X,那么 Y 就会发生”),但它并没有真正描述计算机在做什么'在引擎盖下'。

我在 Stack Overflow 上找到了几篇帖子(例如 thisthisthis),但这些似乎都集中在特定情况下。

有人知道有什么资源可以真正解释 Python 在幕后所做的事情吗?

编辑:我从 StackOverflow 得到反馈,这个问题可能 是重复的。 The other question 询问“.PY 文件如何获取 编译(到字节码)然后由 VM 执行?我在问什么 这里是“有没有解释 Python 如何放置变量的页面, 内存中的对象、函数等,并解释了它们是如何使用的 实际运行 Python 程序'(子问题:这是一个合适的 如何解决对重复问题的担忧?可不可能是 最好把它放在评论中?)

【问题讨论】:

  • python 实际上是用 C 语言编写的,因此您可以获取该语言本身的源代码并通读它,如果这有助于您了解它的工作原理。
  • 您可能还会发现this Programmers question 很有帮助。
  • docs.python.org/3/faq/… 有一些指针
  • 您在寻找这样的东西吗?您可以使用 id 内置函数获取有关对象内存位置的信息,但无法通过其 id 直接访问对象,而是解释器跟踪特定对象存在多少引用以及何时没有更多引用该对象被垃圾收集,它调用它的__del__ 方法来清理它的资源,例如关闭打开 io 的文件。
  • 首先阅读@Ilja 链接的常见问题解答和 Paul Evans 回答中的 Python 数据模型。

标签: python memory memory-management


【解决方案1】:

对于 python,您想立即了解引擎盖下发生的事情以便能够有效地使用该语言与 C/C++ 完全不同,因为它是一个完全不同的语言环境。您想要了解的不是内存中发生的事情的本质,而是Python's Data Model

【讨论】:

  • 虽然这是一个仅链接的答案,并没有真正回答原始问题,但我完全同意理解数据模型对 python 的帮助比理解内存管理更多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 2013-11-04
  • 2021-10-29
  • 2011-08-07
  • 2019-09-29
  • 1970-01-01
相关资源
最近更新 更多