python内存管理机制

Bill78 等级 775 0 0

1. 内存管理架构

第0层: 是操作系统提供的内存管理接口,比如c运行时提供的malloc和free接口。这一层是由操作系统实现并管理的,python不能干涉这一层的行为。

第1层:基于第0层操作系统提供的内存管理接口包装而成,其目的仅仅是为python提供一层统一的raw memory的管理接口。

提供统一的接口是虽然不同的操作系统提供了ANSI C标准所定义的内存管理接口,但对于某些特殊的情况不同的操作系统有不同的行为。为了处理这些平台相关的内存分配行为,python必须要在C的内存分配接口上再提供一层包装。

第2层:第1层所提供的内存管理接口其功能是有限的,想象一下,如果创建一个PyIntObject对象,还要进行许多额外的工作,比如设置对象的类型对象参数,初始化对象的引用计数器等。为了简化python自身的开发,python在比第一层更高的抽象层次上提供了第二层内存管理接口。GC是在这层实现的。

第3层:在第2层内存管理机制之上,对于python的一些常用对象,比如整数对象,字符串对象等,python又构建了更高抽象层次的内存管理策略。对于第3层的内存管理策略,主要就是对象缓冲池对象。

python内存管理机制

2. 小块空间的内存池

整个小块内存池可以视为一个层次结构,在这个层次结构中,一共分为4层,从下到上分别为:block、pool、arena和内存池。其中,block、pool和arena都是python代码中可以找到的实体,而最顶层的内存池只是一个概念上的东西,表示python对于整个小块内存分配和释放行为的内存管理机制。

2.1 block

 在最底层,block是一个确定大小的内存块。在python中,有很多种block,不同种类的block都有不同的内存大小,这些内存大小的值就被称为size class。为了在当前主流32位和64位平台上都能获得最佳的性能,所有的block的长度都是8字节对齐的。

python内存管理机制

python内存管理机制

2.2 Pool

初始化pool的结构图:

python内存管理机制

pool的内存申请情况如下:

python内存管理机制

2.3 arena

arena的默认大小是256KB,那么大致相当于包含64个pool。

arena的内存分布情况如下:

python内存管理机制

arena在某时刻的可能状态:

python内存管理机制

申请arena:

2.4 内存池

pool的三种状态:

 ![](https://img-hello-world.oss-cn-beijing.aliyuncs.com/6341c8f71bd0afaf3a8818860c6eba97.png)

python内存管理机制

2.4.1 pool的初始化

2.4.2 block的释放

当我们释放一个block后,可能会引起pool的状态变化:

 a) used状态转变成empty状态:

      将pool链接到链入到freepool中

 b) full状态转变成used状态:

    仅仅是将pool重新链回usedpools即可

 c)仍然还是used状态:

     python仅仅将释放的block放到自由block链表中,并调整pool中的ref.count这个引用计数器

  对arena的处理,分为下面4种情况:

1)如果arena所有的pool都是empty,释放掉pool占用的内存,将arena链接到“未使用”状态

 2) 如果arena没有了empty的pool,那么usable\_arenas链表中就找不到该arena,由于arena中有了一个pool,需要将这个arena链入到usable\_arenas链表的表头

 3)

python内存管理机制

4) 其他情况,不对arena进行任何的处理。

2.5 内存池全景图

python内存管理机制

本文转自 https://blog.csdn.net/yehuoneng/article/details/89047319,如有侵权,请联系删除。

收藏
评论区

相关推荐

Python的环境搭建和下载
Python是一个跨平台、可移植的编程语言,因此可在windows、Linux和Mac OS X系统中安装使用。 安装完成后,你会得到Python解释器环境,可以通过终端输入python命令查看本地是否已经按照python以及python版本。这里有一点需要注意的是,如果没有将python的安装目录添加到环境变量中,会报错(python不是内部命令或外部命
python内存管理机制
1\. 内存管理架构 第0层: 是操作系统提供的内存管理接口,比如c运行时提供的malloc和free接口。这一层是由操作系统实现并管理的,python不能干涉这一层的行为。 第1层:基于第0层操作系统提供的内存管理接口包装而成,其目的仅仅是为python提供一层统一的raw memory的管理接口。 提供统一的接口是虽然不同的操
Python编程基础(快速入门必看
Python编程基础一、Python语言基本语法 Python是一
python文件的第一行 #!/usr/bin/python3 是什么意思?
python文件的第一行代码通常在脚本语言的第一行会看到: !/usr/bin/env python或 !/usr/bin/python 首先要确定的一点是它不是注释。这两句话的目的都是指出你的python文件用什么可执行程序去运行它。1. !/usr/bin/python 是告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释
Ubuntu 常用命令记录
一、Python相关设置 ------------ 修改Python默认版本 ------------ cd /usr/bin sudo rm -rf python sudo ln -s /usr/bin/python3 /usr/bin/python 检查是否设置成功: python -V 安
Atom的python插件和常用插件
python: simplified-chinese-menu:中文汉化(英文差的) 代码高亮:Atom自带 自动补全:autocomplete-python 语法检查:linter-flake8 定义跳转:python-tools 代码运行:atom-runner (只能输出,不能输入),atom-python-run(Windows,可以输入
CentOS升级Python到2.7版本
查看python的版本 python -V Python 2.4.3 1.先安装GCC yum -y install gcc 2.下载Python-2.7.2 wget http://python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2 3.解压Python-2.7.2
Django学习笔记
1\. django-admin.py startproject mysite 2\. python manage.py help 3\. python manage.py runserver 4\. python 搜索路径为sys.path,运行时可追加目录至sys.path 5\. python模板使用: \>>> from django im
FreeBSD python安装MySQL
fetch https://pypi.python.org/packages/source/M/MySQL-python/MySQL-python-1.2.4.zip unzip MySQL-python-1.2.4.zip cd MySQL-python-1.2.4 python setup.py install ln -s /usr/loca
Linux下Python编程
linux下python编程可以使用sublime-text3来作为编辑器,很方便,而且linux默认就是有python2和python3环境安装的,我们只要安装sublime-text3即可进行python编程 sudo update-alternatives --install /usr/bin/python python /usr/bin/p
Python 3 教程
Python 3 教程 =========== ![python3](https://www.runoob.com/wp-content/uploads/2014/05/python3.png) Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,
Python List数据的遍历
方式一: <!-- lang: python --> app_list = [1234, 5677, 8899] <!-- lang: python --> for app_id in app_list: <!-- lang: python --> print app_id 输出: 123
Python环境搭建—安利Python小白的Python和Pycharm安装详细教程
人生苦短,我用Python。众所周知,Python目前越来越火,学习Python的小伙伴也越来越多。最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了方便大家学习Python,小编整理了一套Python和Pycharm安装详细教程,只要大家按照这个步骤来,就可以轻松的搞定Python和Pycharm的安装了。
Python解释器和IPython
简介 == 今天给大家介绍一下Python的一个功能非常强大的解释器IPython。虽然Python本身自带解释器,但是相对而言IPython的功能更加的强大。 Python解释器 ========= Python是自带解释器的,我们在命令行输入python即可进入python的解释器环境: $> pythonPython 2.7.15 (d
Python进阶丨如何创建你的第一个Python元类?
> **摘要:**通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。 Python元类设置类的行为和规则。元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一。通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。本文介绍以下概念: * * 什么是Python元类?