关于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,