当前位置: 首页 > 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. 块遍历处理

    • 将块列表重置为仅包含保留块
    • 遍历所有内存块:

相关文章:

  • Kubernetes控制平面组件:Kubelet详解(四):gRPC 与 CRI gRPC实现
  • Android清单文件
  • Nexus首次亮相迪拜 TOKEN2049:以“手机 + 钱包 + 公链 + RWA”生态系统引领未来区块链基建
  • 2025年中国DevOps工具选型指南:主流平台能力横向对比
  • Idea 设置编码UTF-8 Idea中 .properties 配置文件中文乱码
  • Java中的异常机制
  • 时序数据库IoTDB分布式系统监控基础概述
  • 2025年中国主流DevOps平台对比分析:Gitee、阿里云效与GitLab CE的技术适配与合规实践全景解读
  • vue-ganttastic甘特图label标签横向滚动固定方法
  • 多模态论文笔记——NaViT
  • 零基础用 Hexo + Matery 搭建博客|Github Pages 免费部署教程
  • NineData 社区版 V4.1.0 正式发布,新增 4 条迁移链路,本地化数据管理能力再升级
  • RabbitMq消息阻塞,立即解决方案
  • NNLM神经网络语言模型总结
  • 使用 hover-class 实现触摸态效果 - uni-app 教程
  • 使用VSCode编辑Markdown+PlantUml
  • 推荐一个Winform开源的UI工具包
  • HTTP / HTTPS 协议
  • 移动网页调试工具实战:从 Chrome 到 WebDebugX 的效率演进
  • 【C/C++】自定义类型:结构体
  • 中国乒协坚决抵制恶意造谣,刘国梁21日将前往多哈参加国际乒联会议
  • 为何选择上海?两家外企提到营商环境、人才资源……
  • 山东市监局回应“盒马一批次‘无抗’鸡蛋抽检不合格后复检合格”:系生产商自行送检
  • 沧州制造展现硬核实力:管道装备支撑大国基建,核电锚栓实现国产
  • 科普|揭秘女性压力性尿失禁的真相
  • 时隔近4年再出征!长三丙成功发射通信技术试验卫星十九号