Python中的内存管理
内存是一本空白的书
可以将计算机的内存想像成一本用来写短篇小说的空书。它的页面上还没有任何的内容,但是到了后面,不同的作者将会出现。每个作者都想要一些空间来书写它们的内容。
由于它们不允许书写在不属于它们的页,因此它们必须小心写内容在页面上,在它们开始写作之前,它们会咨询负责管理这本书的“经理”,然后由经理来决定允许它们写书的位置。
由于这本书已经存在了很长的时间,所以其中许多故事都已经不再适用。当没有人阅读或引用这些故事时,它们会被移除来为新故事腾出空间。
从本质上来讲,计算机内存就像是这本空书。事实上,调用固定长度的连续内存页块是很常见的。
作者就是需要将数据存储在内存中的不同应用程序或者进程。经理,决定作者在书中可以写的内容,扮演各种记忆管理者的角色,删除旧故事以便为新故事腾出空间的人是垃圾收集者。
内存管理:从硬件到软件
内存管理是应用程序读写数据的过程。内存管理器确定应用程序数据的放置位置。由于内存是有限的,就像我们的书中的页面,管理者必须找到一些可用空间并将其提供给应用程序。这种提供存储空间的过程通常称为内存分配。
另一方面,当不再需要数据时,可以删除或者释放数据。但释放到哪里?
在计算机的某个地方,有一个物理设备在运行Python程序时存储数据。在对象实际到达硬件之前,Python代码经历了许多抽象层。
硬件上方的主要层之一(例如RAM或硬盘驱动器)是操作系统。它执行(或拒绝)读写内存的请求。
在操作系统之上,有一些应用程序,其中一个是CPython。Python代码的内存管理由Python应用程序处理。Python的程序中用于内存管理的算法和结构是本文的重点。
CPython
默认的Python解释器,CPython,实际上是用C语言编写的。
我们还需要在计算机上执行解释型代码。CPython可以满足这些需求。它将Python代码转换为指令,随后在虚拟机上运行。
- **注意:**虚拟机就像物理计算机,但它们是用软件实现的。它们通常处理类似于汇编指令基本指令。
Python是一种解释性编程语言。您的Python代码实际上被编译为更多计算机可读的指令,称为字节码。运行代码时,这些指令将由虚拟机解释。
见过.pyc
文件或__pycache__
文件夹吗?这是由虚拟机解释的字节码。
值得注意的是,除了CPython之外还有其他解释器。例如Jython编译为Java字节码以在Java虚拟机上运行。
本文将重点介绍由Python的默认解释器CPython完成的内存管理。
好的,所以CPython是用C语言编写的,它解释了Python字节码。这与内存管理有什么关系?那么,用于内存管理的算法和结构存在于CPython代码中,在C中。要理解Python的内存管理,你必须对CPython本身有一个基本的了解。
CPython是用C语言编写的,它本身不支持面向对象的编程。因此&