python保持函数内存 python储存( 二 )


内存池概念
内存池的概念就是预先在内存中申请一定数量的,大小相等的内存块留作备用 , 当有新的内存需求时 , 就先从内存池中分配内存给这个需求 , 不够了之后再申请新的内存 。这样做最显著的优势就是能够减少内存碎片 , 提升效率 。内存池的实现方式有很多,性能和适用范围也不一样 。
特性
1.Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统 。
2.Pymalloc机制 。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放 。
3.Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc 。
4.对于Python对象,如整数,浮点数和List,都有其独立的私有内存池 , 对象间不共享他们的内存池 。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数 。
python的内存驻留机制(小数据池)python的内存驻留机制,是一种节省内存的方案,它将int, str, bool类型的数据做成小数据池 。当程序要创建字符串等对象前会先检查池中是否有满足的字符串 。
驻留机制节省大量的重复内存 。在内部,小数据池是由一个全局的dict 维护,该字典中的对象成了单例模式,从而节省内存 。
变量interned就是全局存放字符串池的字典的变量名interned = PyDict_New() ,为了让intern机制中的字符串不被回收,设置字典时PyDict_SetDefault(interned, s, s);将字符串作为键同时也作为值进行设置,这样对于字符串对象的引用计数就会进行两次+1操作,这样存于字典中的对象在程序结束前永远不会为 0,这也是y_REFCNT(s) -= 2;将计数减 2 的原因 。
从函数参数中可以看到其实字符串对象还是被创建了 , 内部其实始终会为字符串创建对象,但经过 inter 机制检查后,临时创建的字符串会因引用计数为 0 而被销毁,临时变量在内存中昙花一现然后迅速消失 。
【python保持函数内存 python储存】 指定要驻留的字符串:
为什么要进行字符串驻留呢?
总结:
系统维护一个interned全局字典 , 记录已被驻留的字符串对象,当新字符串a对象需要驻留时 , 先在interned中查找是否存在,若存在则指向已存在的字符串对象,a对象的引用计数减1,若不存在,则记录a对象到interned中 。
关于python保持函数内存和python储存的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读