python内存管理--分层分配

1.分层分配

层级内容
 字典,元祖,列表,字符串.....等等python对象
第3层对象特有的内存分配器(比如聚合对象)
第2层python对象分配器
第1层python低级内存分配器
第0层glibc的malloc
第-1层操作系统虚拟的内存管理器
第-2层物理内存

2.第0层 glibc

  • linux OS提供的glibc这种malloc()
  • 申请的内存大于256K字节,会忠实调用第0层malloc;否则,转给第1层和第2层
  • 第1层负责小于等于256K字节的短命对象

3.第1层:python低级内存分配器

  • 三个级别的内存结构:arena > pool > block
  • arena大小固定为256K
  • pool大小固定4K(与操作系统虚拟内存页大小一致)
  • unusedarenaobjects单项链表;usable_arenas双向链表
  • 生成和管理arena和pool

4.第2层:python对象分配器

  • 负责管理pool内部的block
  • block大小是8的整数倍,最小满足分配需求,会有个内存对齐,比如申请14字节,给你16字节
  • block三种状态:已经分配,使用完毕,未使用

5.第3层:对象特有分配器

  • 包含元组、列表、字典     自上而下要资源

    请给我一个PyDictObject(字典对象)----->PyDict_new()
    ---->请给我sizeof(PyDictObject)字节的block ------>PyObject_GC_New()、PyObject_Malloc()
    ---->请给我sizeof(PyDictObject)字节的pool---->usable_arenas-->freepools、 new_arena()
    ------>我想做一个arena,请给我256K直接的内存----->malloc()

    自下而上返回资源
    malloc() ----> 返回256K的内存,拿去花吧---->
    usable_arenas-->freepools、 new_arena()------>做成arena,返回一个pool,拿去花吧---->
    PyObject_GC_New()、PyObject_Malloc()----->返回pool中一个block,拿去花吧------>
    PyDict_new()----->给你一个字典对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值