当前位置: 首页 > news >正文

【0415】Postgres内核 释放指定 memory context 中所有内存 ④

1. frees all memory (memory context)

Postgres内核中由函数 AllocSetReset() 完成该功能。即 “释放给定set中分配的所有内存。”

它应当将所有已分配的chunks标记为已释放,但不一定需要归还set所拥有的全部资源。我们的实际实现是,除了“保留”块(“keeper” block)(由于其与context header共享一个 malloc chunk,所以我们必须保留)之外, 我们归还所有资源。这样,在每次对上下文进行重置之前进行了少量分配的情况下,就不会频繁调用 malloc(), 这是每个元组上下文的典型行为。

1.1 函数实现逻辑

  1. 参数和初始化:

    • 接收一个 MemoryContext 参数并转换为 AllocSet 类型
    • 检查内存上下文的有效性
    • 在调试模式下会先检查内存损坏和泄漏
  2. 保留块处理

    • 计算并保存保留块(keeper block)的大小用于后续断言检查
    • 清空空闲列表(freelist)
  3. 块遍历处理

    • 将块列表重置为仅包含保留块
    • 遍历所有内存块:
http://www.xdnf.cn/news/450145.html

相关文章:

  • 5.14 BGP作业
  • Linux操作系统实战:进程创建的底层原理(转)
  • 朱老师, 3518e系列,第三季
  • 【Python】杂乱-[代码]Python 替换字符串中相关字符的方法
  • 容器安全-核心概述
  • OpenCV人脸识别LBPH算法原理、案例解析
  • Codeforces Round 1003 (Div. 4)
  • 分布式一致性协议Raft
  • 动物乐园-第16届蓝桥第5次STEMA测评Scratch真题第5题
  • 11-SGM41299-TEC驱动芯片--40℃至+125℃-3A
  • 1. Go 语言环境安装
  • 数据清洗的艺术:如何为AI模型准备高质量数据集?
  • 《Python星球日记》 第71天:命名实体识别(NER)与关系抽取
  • 拓展篇、github的账号创建
  • Oracle中的select1条、几条、指定范围的语句
  • 【证书与信任机制​】证书透明度(Certificate Transparency):如何防止恶意证书颁发?​​
  • 【1000以内具有12个以上因子的整数并输出它的因子】2021-12-27
  • 如何在Mac电脑上的VScode去配置C/C++环境
  • 生成式AI:人工智能的新纪元
  • 请求内存算法题
  • 综述:拓扑材料的热磁性质
  • WordPress 和 GPL – 您需要了解的一切
  • 【leetcode】349. 两个数组的交集
  • WindTerm终端工具功能与优缺点分析
  • mysql的一个缺点
  • libmemcached库api接口讲解一
  • 开发者的测试复盘:架构分层测试策略与工具链闭环设计实战
  • c++之 sort()排序
  • Unity 小提示与小技巧[特殊字符]
  • 基于C#实现中央定位服务器的 P2P 网络聊天系统