对Python内存管理的认识(重点usedpool的一个trick的理解)

本文探讨了Python内存管理的层次结构,重点解析了内存池中的usedpool机制。从block、pool到arena的层次结构,解释了如何通过usedpools数组管理used状态的内存池。文中详细介绍了usedpools数组的特殊定义和初始化过程,展示了如何利用指针偏移创建双循环链表,用于表示不同大小的内存池。最后,概述了各层次之间的关系,以助于理解Python内存管理的复杂性和优化策略。
摘要由CSDN通过智能技术生成

关于python内存的东西实在很多,这里只记录一些比较重要或者我认为值得注意的点。

在python中,内存管理机制被抽象成一种层次似得结果,如果所示


第0层是基于c语言的malloc,第1层主要是对第0层的内存管理接口进行包装,因为如果第0层操作系统不一样可能接口会不统一,第2层是对通用对象内存管理接口,第三层则是对int,string等常用对象进行内存管理接口的封装,里面做了不少优化工作。


前面的不少文章也都提到过内存池这个概念,不错,针对常用的Int,string,list这些类型,python都会有相应的内存池来提高效率。

整个小块内存的内存池可以视为一个层次结构,从小到大依次为block->pool->arena->内存池。

block和内存池在python源码里面并没有相对应的实体结构,只是一个概念,pool和arena则确实存在。

block是一个确定大小的内存块。block的长度都是8字节对齐的,可以有很多不同大小的block,比如8,16,24,32.。。。。。

pool是一组block的集合.一个pool通常为4KB(系统内存页大小).一个pool管理的所有block,它们的大小是一样的,不同的pool可以不一样。一个pool申请的时候会pool_header和相应的内存一起申请,而arena则不一样,它申请的时候可以理解为只申请了一个header,然后会在以后的某个步骤和pool产生联系,进行管理。

arena是一组pool的集合。arena通常为256KB,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值