文章目录
- 1. 删除内存
- 2. 需考虑MemoryContext是一个freelist候选对象
- 2.1 递归遍历
- 2.1.1 MemoryContext申请1个block
- 2.1.2 MemoryContext申请2个block
- 2.3 源码实现
-
1. 删除内存
PG内核内存上下文中,执行真正意义上的内存删除(free())是由函数AllocSetDelete()
完成。该函数将释放给定集合(set)中分配的所有内存,为删除集合(set)做准备。这里的集合即指定的内存上下文变量。
- 与AllocSetReset不同,这必须释放集合的所有资源。
2. 需考虑MemoryContext是一个freelist候选对象
如果函数 AllocSetDelete() 给定参数 context 是一个 freelist 的候选对象,那么就把它放到那个freelist中