面试官:听说你学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;