1 / 6
文档名称:

python的内存管理机制.doc

格式:doc   大小:299KB   页数:6页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

python的内存管理机制.doc

上传人:雯埒 2020/9/20 文件大小:299 KB

下载得到文件列表

python的内存管理机制.doc

相关文档

文档介绍

文档介绍:python的内存管理机制先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲(1)垃圾回收(2)引用计数(3)内存池机制一、垃圾回收:python不像C++,Java等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值。对Python语言来讲,对象的类型和内存都是在运行时确定的。这也是为什么我们称Python语言为动态类型的原因(这里我们把动态类型可以简单的归结为对变量内存地址的分配是在运行时自动判断变量类型并对变量进行赋值)。二、引用计数:Python采用了类似Windows内核对象一样的方式来对内存进行管理。每一个对象,都维护这一个对指向该对对象的引用的计数。如图所示(图片来自Python核心编程)、x==x ,然后将这个浮点数对象的引用赋值给x,因为x是第一个引用,因此,=x创建了一个指向同一个对象的引用别名y,我们发现,并没有为Y创建一个新的对象,而是将Y也指向了x指向的浮点数对象,: 变量a和变量b的id一致(我们可以将id值想象为C中变量的指针).我们援引另一个网址的图片来说明问题:对于C语言来讲,我们创建一个变量A时就会为为该变量申请一个内存空间,并将变量值 放入该空间中,当将该变量赋给另一变量B时会为B申请一个新的内存空间,并将变量值放入到B的内存空间中,这也是为什么A和B的指针不一致的原因。如图:               intA=1                      intA=2而Python的情况却不一样,实际上,Python的处理方式和Javascript有点类似,如图所示,变量更像是附在对象上的标签(和引用的定义类似)。当变量被绑定在一个对象上的时候,该变量的引用计数就是1,(还有另外一些情况也会导致变量引用计数的增加),系统会自动维护这些标签,并定时扫描,当某标签的引用计数变为0的时候,该对就会被回收。                           a=1                         a=2                        b=a  三、内存池机制 Python的内存机制以金字塔行,-1,-2层主要有操作系统进行操作, 第0层是C中的malloc,free等内存分配和释放函数进行操作; 第1层和第2层是内存池,有Python的接口函数PyMem_Malloc函数实现,当对象小于256K时有该层直接分配内存; 第3层是最上层,也就是我们对Python对象的直接操作;在C中如果频繁的调用malloc与free时,: 如果请求分配的内存在1~256字节之间就使用自己的内存管理系统,否则直接使用malloc. 这里还是会调用malloc分配内存,但每次会分配一块大小为256k的大块内存. 经由内存池登记的内存到最后还是会回收到内存池,,例如数值、字符串,元组(tuple不允许被更改)采用的是复制的方式(深拷贝?),也就是说当将另一个变量B赋值给变量