望都网站建设,wordpress标签页固定链接,电商指的是什么行业,大连网站建设新图闻一、内存管理机制1.由c开发出来的cpython2.include / objests3.需要下载python源码包4.Pyobject#xff1a;floatPyVarObject#xff1a;5.在python中所有东西创建对象的时候#xff0c;内部都会存储一个数据// 维护双向链表struct _object *_ob_next;struct _object *_ob_p…一、内存管理机制1.由c开发出来的cpython2.include / objests3.需要下载python源码包4.PyobjectfloatPyVarObject5.在python中所有东西创建对象的时候内部都会存储一个数据// 维护双向链表struct _object *_ob_next;struct _object *_ob_prev;// 应用计数器Py_ssize_t ob_refcnt;// 类型struct _typeobject *ob_type;如果是有多个元素组成的话内部会再多维护一个Py_ssize_t ob_size; /* Number of items in variable part */6.在创建对象时如操作v 0.3源码内部a.开辟内存b.初始化ob_fval0.3ob_typefloatob_refcnt1c.将对象加入到双向链表中 ref_chain操作name v源码内部ob_refcnt1操作del v源码内部ob_refcnt-1操作def fun(arg):print(123)fun(name)源码内部刚进去ob_refcnt1执行完ob_refcnt-1操作del name源码内部ob_refcnt-1每次应用计数器减一时都会检查是否为0如果是0则认为他是垃圾就对它进行回收内存管理机制Python是由c语言开发操作都是基于底层的c语言实现的Python中创建每个对象内部都会与c语言结构体维护一些值Pyobject指针指向上面的数据指针指向下面的数据计数器类型PyVarObjectPyObject容量个数在创建对象时每个对象至少内部有四个值双向链表/ob_refcnt/ob_type之后对内存中的数据进行初始化初始化本质引用计数器1赋值然后将对象添加到双向链表中以后再有其他变量执行这个内存则让引用计数器1如果销毁某个变量则找到指向的内存将其引用计数器-1引用计数器如果为零则进行垃圾回收在内部可能存在缓存机制例如float/int/list最开始不会真正销毁而是放在free_list的链表中以后在创建同类型的数据时会先去链表中取出对象然后在对对象进行初始化。(float内存管理中默认缓存100个/list内存管理中默认缓存10个)二、垃圾回收机制引用计数器为主标记清楚和分代回收为辅1.引用计数器引用计数器同上内存管理中的描述引用计数器会出现循环引用(1)a [1, 2]b [4, 5]a.append(b) # a中的第三个元素指向bb的计数器发生变化变成2了(2)del adel b# 当这种代码特别多的时候内存的占用也会特别多内存占用特别多的时候会造成内存泄漏(溢出)2.标记清除标记清除可以用来解决内存泄漏的问题针对那些容器类型的对象在Python中会将他们单独放到一个双向链表中做定期扫描检查是否有循环引用如果有各自-1如果-1之后等于0则直接回收。3.分代回收为了减少对象的扫描将没有问题的对象让他放到上一级的链表中默认下一级扫描10次上一级才扫描1次一共有三代链表