09-12-周五_15-58-51

This commit is contained in:
2025-09-12 15:58:51 +08:00
parent 3e9cd78f64
commit d69af1159c

View File

@@ -141,7 +141,7 @@ typedef struct {
在我们了解了这两个结构体,现在我们来看看每一个数据类型都封装了哪些值:
* flaot类型
* float类型
float结构体
```c
@@ -285,14 +285,10 @@ del a # 删除变量aa对应的对象的引用计数器-1 (此时引用计
当引用计数器为0 意味着没有人再使用这个对象这个对象就变成垃圾垃圾回收
回收1.对象从refchain的链表移除
2.将对象进行销毁内存归还给操作系统可用内存就增加
2.将对象进行销毁内存归还给操作系统可用内存就增加
```
**当引用计数器**为0 时,意味着没有人再使用这个对象,这个对象就变成垃圾,垃圾回收。
**回收1.对象从refchain的链表移除。**
**2.将对象进行销毁,内存归还给操作系统,可用内存就增加**
以上就是引用计数器大体上的机制但是后面的缓存机制学习完之后我们才会进一步理解这里不是简单的说计数器等于0就销毁内部还有一定的缓冲目前就简单理解成计数器为0我们就进行垃圾回收。
以上就是引用计数器大体上的机制但是后面的缓存机制学习完之后我们才会进一步理解这里不是简单的说计数器等于0就销毁内部还有一定的缓存目前就简单理解成计数器为0我们就进行垃圾回收。
#### 例子
@@ -327,7 +323,7 @@ v2.append(v1) # 把v1追加到v1中则v1对应的[1,2,3]对象的引
del v1 # 引用计数器-1
del v2 # 引用计数器-1
最终v1,v2引用计数器都是1
最终v1,v2引用计数器都是1但是却没有任何的变量可以使用这个v1,v2原先指向的数据
```
![图片](13.垃圾回收机制/3.png)
@@ -353,7 +349,7 @@ del v2 # 引用计数器-1
### 2.1引入目的
为了解决循环引用的不足python的底层不会单单只用引用计数器引入了一个机制叫做标记清
为了解决循环引用的不足python的底层不会单单只用引用计数器引入了一个机制叫做标记清
### 2.2实现原理
@@ -370,7 +366,7 @@ del v2 # 引用计数器-1
![图片](13.垃圾回收机制/5.png)
第二个链表 **只存储 可能是循环引用的对象**
第二个链表 **只存储可能是循环引用的对象**
维护两个链表的作用是在python内部某种情况下会去扫描`可能存在循环引用的链表` 中的每个元素,在循环一个列表的元素时,由于内部还有子元素 ,如果存在循环引用(v1 = [1,2,3,v2]和v2 = [4,5,6,v1])比如从v1的子元素中找到了v2又从v2的子元素中找到了v1那么就检查到循环引用如果有循环引用就让双方的引用计数器各自-1如果是0则垃圾回收。
@@ -385,7 +381,7 @@ del v2 # 引用计数器-1
在上图中我们把小黑点视为全局变量也就是把它作为root object从小黑点出发对象1可直达那么它将被标记对象2、3可间接到达也会被标记而4和5不可达那么1、2、3就是活动对象4和5是非活动对象会被GC回收。
1. 寻找对象root object的集合作为垃圾检测动作的起点对象也就是一些全局引用和函数栈中的引用,这些引用所指向的对象是不可被删除的。
1. 寻找对象root object的集合作为垃圾检测动作的起点对象也就是一些全局引用和函数栈中的引用,这些引用所指向的对象是不可被删除的。
2. 从root object集合出发沿着root object集合中的每一个引用如果能够到达某个对象则说明这个对象是可达的那么就不会被删除这个过程就是垃圾检测阶段。