python竞赛内存_Python的内存机制浅析

Python的内存管理大概分为三点:

引用计数

垃圾回收

内存池机制

这是我要讲的东西嘛?Of course! 肯定不是啊,这些网上都有我要讲的是人家没有的才好玩啊。

No. 1  内存

内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器和主存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的。

这上面一大堆只是告诉你,内存这个东西很重要,它把数据暂时存放于CPU中的运算数据,它运算速度贼快。但是相对的,他的空间很小,这个时候就要提到我们的硬盘了,这个东西啊,空间就很大,但是运算速度很慢。这是为什么呢?因为硬盘主要是靠磁道和磁头进行数据的读取写入,而内存呢,则是玩芯片的,直接通过半导体来与CPU交流,你是”01”我也是”01”这沟通速度,贼溜~而硬盘就不行了,它相当于将磁头在磁道上吸粉,来获取数据,然后在传输给CPU,这就好比吸二手烟一样,CPU要是喜欢才有鬼了呢。

No. 2 引用计数

引用计数是计算机编程语言中的一种内存管理技术,是指将资源(可以是对象、内存或磁盘空间等等)的被引用次数保存起来,当被引用次数变为零时就将其释放的过程。使用引用计数技术可以实现自动资源管理的目的。同时引用计数还可以指使用引用计数技术回收未使用资源的垃圾回收算法。

这就是告诉你,引用计数和垃圾回收也是有很大关系的,这个慢慢讲。

X = 5

Y = X

X = 6

此时,就好比X先把自己介绍给了Y然后又将自己整容成了6,这个时候Y还能找到X嘛?

X先介绍给了Y,然后告诉Y自己住在内存的1栋1楼,悄悄的整容成了6,搬到了内存的2栋2楼。这个时候就涉及到了内存的地址,因为内存的特性(暂时的存储数据于CPU),所以这种分家也是临时的,下次再打开电脑家就换了。这主要是为了减少内存的运行压力,保证内存的运行速度,它和CPU直接沟通,必须要快,他就好比是一个吃了饭不给钱抹嘴就跑的混蛋,慢了就要挨抽。获取一个引用计数涉及到了模块,虽然我看会了,但我讲不来就不讲了。

(“””

import sys   #导入一个模块

x = 5

print(sys.getrefcount(x))    #使用导入模块中的函数getrefcount()

>>>18

“””)

No. 3 垃圾回收

python的垃圾回收机制以引用计数为主,标记-清除和分代收集为辅。

垃圾回收的目的主要是保证内存的高效计算,就好比说你每赋值一个变量就在内存上给他分配了一个房子(id地址),赋值的变量越多,房子就越多,最后你好多变量都会重复,房子缺不会重复,为了保护内存高效运转,就必须要把一些人踢出去,踢走谁合适呢?就是那些整了容搬了新家的人,就把的旧房子收回去。

No. 4 内存池机制

内存分配层次:

-1,-2层主要有操作系统进行操作;

第0层是C中的malloc,free等内存分配和释放函数进行操作;

第1层和第2层是内存池,有Python的接口函数PyMem_Malloc函数实现,当对象小于256K时有该层直接分配内存;

第3层是最上层,也就是我们对Python对象的直接操作;

这个理解起来就更简单了,就好比说我内存虽然不如你硬盘空间大,但是我好歹还是有个地儿的,这个地儿也不能空着啊,北京CBD多贵啊。我就提前将一些简单数据,容量小的数据提前存在这,用的时候就不用再去读取了。

**以上的蓝字灰底的理论地址读取于https://blog.csdn.net/m0_37218227/article/details/77524989

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值