python函数内存分配 python动态内存分配( 二 )


在python中 -5到256之间的数据 , 系统会默认给每个数字分配一个内存区域 , 其后有赋值时都会指向固定的已分配的内存区域
在运行py程序的时候,解释器会专门分配一块空白的内存,用来存放纯单词字符组成的字符串(数字,字母,下划线)
字符串赋值时,会先去查找要赋值的字符串是否已存在于内存区域,已存在,则指向已存在的内存,不存在,则会在大整数池中分配一块内存存放此字符串
Python如何进行内存管理Python的内存管理,一般从以下三个方面来说:
1)对象的引用计数机制(四增五减)
2)垃圾回收机制(手动自动,分代回收)
3)内存池机制(大m小p)
1)对象的引用计数机制
要保持追踪内存中的对象,Python使用了引用计数这一简单的技术 。sys.getrefcount(a)可以查看a对象的引用计数,但是比正常计数大1,因为调用函数的时候传入a , 这会让a的引用计数+1
2)垃圾回收机制
吃太多,总会变胖,Python也是这样 。当Python中的对象越来越多,它们将占据越来越大的内存 。不过你不用太担心Python的体形,它会在适当的时候“减肥”,启动垃圾回收(garbage
collection) , 将没用的对象清除
从基本原理上,当Python的某个对象的引用计数降为0时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了
比如某个新建对象,它被分配给某个引用,对象的引用计数变为1 。如果引用被删除,对象的引用计数为0,那么该对象就可以被垃圾回收 。
然而,减肥是个昂贵而费力的事情 。垃圾回收时,Python不能进行其它的任务 。频繁的垃圾回收将大大降低Python的工作效率 。如果内存中的对象不多 , 就没有必要总启动垃圾回收 。
所以,Python只会在特定条件下,自动启动垃圾回收 。当Python运行时,会记录其中分配对象(object
allocation)和取消分配对象(object deallocation)的次数 。当两者的差值高于某个阈值时,垃圾回收才会启动 。
我们可以通过gc模块的get_threshold()方法,查看该阈值 。
3)内存池机制
Python中有分为大内存和小内存:(256K为界限分大小内存)
1、大内存使用malloc进行分配
2、小内存使用内存池进行分配
python中的内存管理机制都有两套实现 , 一套是针对小对象,就是大小小于256K时,pymalloc会在内存池中申请内存空间;当大于256K时 , 则会直接执行系统的malloc的行为来申请内存空间 。
python的内存管理机制论坛
活动
招聘
专题
打开CSDN APP
Copyright ? 1999-2020, CSDN.NET, All Rights Reserved
登录
XCCS_澍
关注
【python函数内存分配 python动态内存分配】Python 的内存管理机制及调优手段? 原创
2018-08-05 06:50:53
XCCS_澍
码龄7年
关注
内存管理机制:引用计数、垃圾回收、内存池 。
一、引用计数:
引用计数是一种非常高效的内存管理手段 ,  当一个 Python 对象被引用时其引用计数增加 1,当其不再被一个变量引用时则计数减 1. 当引用计数等于 0 时对象被删除 。
二、垃圾回收 :
1. 引用计数
引用计数也是一种垃圾收集机制,而且也是一种最直观 , 最简单的垃圾收集技术 。当 Python 的某个对象的引用计数降为 0 时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了 。比如某个新建对象,它被分配给某个引用,对象的引用计数变为 1 。如果引用被删除,对象的引用计数为 0,那么该对象就可以被垃圾回收 。不过如果出现循环引用的话,引用计数机制就不再起有效的作用了

推荐阅读