当前位置: 首页 > 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.dtcms.com/a/189548.html

相关文章:

  • 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++】自定义类型:结构体
  • Ubuntu 系统默认已安装 python,此处只需添加一个超链接即可
  • 单向循环链表C语言实现实现(全)
  • 在Ubuntu24.04中配置开源直线特征提取软件DeepLSD
  • Kubernetes排错(十七) :kubelet日志报device or resource busy
  • IIS服务器URL重写配置完整教程
  • Spark 集群配置、启动与监控指南
  • 榕壹云打车系统:基于Spring Boot+MySQL+UniApp的开源网约车解决方案
  • DAX权威指南2:CALCULATE 与 CALCULATETABLE
  • 【Linux笔记】——进程信号的捕捉——从中断聊聊OS是怎么“活起来”的
  • Jmeter变量传递介绍