深入理解Python内存管理与垃圾回收

面试官:听说你学Python?那你给我讲讲Python如何进行内存管理?

我:???内存管理不太清楚额。。。

面试官:那你知道Python垃圾回收吗?

我:(尴尬一下后,还好我看到过相关博客)Python垃圾回收引用计数为主、标记清除和分代回收为主。

面试官:那你仔细讲讲这三种垃圾回收技术?

我:卒。。。

面试官:听说你学Python?那你给我讲讲Python如何进行内存管理?

我:???内存管理不太清楚额。。。

面试官:那你知道Python垃圾回收吗?

我:(尴尬一下后,还好我看到过相关博客)Python垃圾回收引用计数为主、标记清除和分代回收为主。

面试官:那你仔细讲讲这三种垃圾回收技术?

我:卒。。。

先看看内存管理

内存的管理简单来说:分配(malloc)+回收(free)。

再我们看文章之前,先思考一下:如果是你设计,会怎么进行内存管理?答:好,不会设计(笔主也不会),会的大佬请绕过。我们一起了解看看Python是怎么设计的。为了提高效率就是:

  • 如何高效分配?
  • 如何有效回收?

什么是内存

买电脑的配置“4G + 500G / 1T”,这里的4G就是指电脑的内存容量,而电脑的硬盘 500G / 1T。

内存(Memory,全名指内部存储器),自然就会想到外存,他们都硬件设备。

内存是计算机中重要的部件之一,它是外存与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。

内存就像一本空白的书

首先,您可以将计算机的存储空间比作一本空白的短篇小说。页面上还没有任何内容。最终,会有不同的作者出现。每个作者都需要一些空间来写他们的故事。

由于不允许彼此书写,因此必须注意他们能书写的页面。开始书写之前,请先咨询书籍管理员。然后,管理员决定允许他们在书中写什么。

如果这书已经存在很长时间了,因此其中的许多故事都不再适用。当没有人阅读或引用故事时,它们将被删除以为新故事腾出空间。

本质上,计算机内存就像一本空书。实际上,调用固定长度的连续内存面块是很常见的,因此这种类比非常适用。

作者就像需要将数据存储在内存中的不同应用程序或进程。决定作者在书中书写位置的管理员就像是各种存储器管理的角色,删除旧故事为新故事腾出空间的人是垃圾收集者(garbage collector)。

以上类比出自​​此文​

内存管理:从硬件到软件

为什么4G内存的电脑可以高效的分析上G的数据,而且程序可以一直跑下去。

在这4G内存的背后,Python都帮助我们做了什么?

内存管理是应用程序读取和写入数据的过程。内存管理器确定将应用程序数据放置在何处。

由于内存有限,类比书中的页面一样,管理员必须找到一些可用空间并将其提供给应用程序。提供内存的过程通常称为内存分配。

其实如果我们了解内存管理机制,以更快、更好的方式解决问题。

看完本篇文章,带您稍微了解Python内存管理的设计哲学。

对象管理

可能我们听过,Python鼎鼎有名的那句“一切皆对象”。是的,在Python中数字是对象,字符串是对象,任何事物都是对象,Cpython下,而Python对象实现的核心就是一个结构体–PyObject。

typedef struct_object{

  int ob_refcnt;

  struct_typeobject *ob_type;

}PyObject;
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享