`

pg的内存管理机制二:AllocSet/MemoryContext的内存回收

阅读更多

 

话说 MemoryContextMethods 结构里的函数实现了pgAllocSet/MemoryContext 的内存管理机制,定义见下面。

typedef struct MemoryContextMethods

{

     void    *(*alloc) (MemoryContext context, Size size);

     /* call this free_p in case someone #define's free() */

     void      (* free_p ) (MemoryContext context, void *pointer);

     void    *(*realloc) (MemoryContext context, void *pointer, Size size);

     void      (*init) (MemoryContext context);

     void      (*reset) (MemoryContext context);

     void      (*delete ) (MemoryContext context);

     Size     (*get_chunk_space) (MemoryContext context, void *pointer);

     bool      (*is_empty) (MemoryContext context);

     void      (*stats) (MemoryContext context);

#ifdef MEMORY_CONTEXT_CHECKING

     void      (*check) (MemoryContext context);

#endif

} MemoryContextMethods;

 

其中free_p 由静态函数AllocSetFree() 实现,具体签名在下面。它实现了AllocSet/MemoryContext 相关的内存回收机制。

static void AllocSetFree(MemoryContext context, void *pointer)

下面就写 MemoryContextMethods.free_p 的实现者AllocSetFree() 这个函数。先上图,然后分块解读处理流程。


 

AllocSetFree 回收内存流程图

 

传进来了AllocSet 和内存指针,根据该内存指针,找到对应的AllocChunk ,检查该chunk 中是否有非法写的情况,若有,在日志中写警告记录。接着检查该chunk 大小是否大于chunk 的最大值8k ,把小于8kAllocChunk 加到传进来的AllocSet 中空闲AllocChunk 链表数组freelist 中同样大小的AllocChunk 链表头部。大于8kAllocChunk 是根据需要分配的只包含一个AllocChunkAllocBlock ,找到包含超大AllocChunkAllockBlock ,释放该AllocBlock 以备其他需要时malloc ,如果没有找到大于8kAllocChunkAllocBlock ,在日志中写错误记录。具体看流程图吧。

 

  • 大小: 48.3 KB
0
0
分享到:
评论

相关推荐

    http://www.baidu.com/s?kw=&sc=web&cl=3&tn=sitehao123&ct=0&rn=&lm=&ie=gb2312&rs2=&myselectvalue=&f=&pv=&z=&from=&word=%c1%d4%c9%b1%d5%df%cd%e2%b9%d2&tn=shnetzone_pg

    很抱歉,但根据您给出的信息,标题、描述和标签中的链接看似是搜索引擎的查询URL,它们并没有提供关于特定IT知识点的直接信息。压缩包子文件的文件名称列表包括"QQ空间人气精灵.exe"、"更新内容.txt"、"免责声明.txt...

    pg055axibridgepcie_055PG.com_055pg.com_www.055PG.COM_https//:055

    055PG.com_055pg.com_www.055PG.COM_https//:055"似乎是一个标识符,结合描述中的"AXI Memory Mapped to PCI Express (PCIe)",我们可以推测这可能是一份关于在系统设计中使用AXI(Advanced eXtensible Interface)...

    兔子影视网站源码v1.3.6.5

    一款基于freekan影视系统二次开发的影视网站源码,增加会员系统,卡密系统,会员分组系统,自带解析接口,整体来说不错!安装界面无线跳转检查伪静态文件PHP版本建议5.4至5.6!播放页面排版错误请检查后台域名是否正确...

    万能游戏资源提取软件

    二、搜索 可以根据文件名查找图片。支持查找的游戏列表详见附录1 搜索支持模糊查找、区分大小写和正则表达式,正则表达式的具体定义参见附录3 三、导出(支持bmp、jpg、png和mng格式,mng格式的说明参见附录2。另外...

    JS实现仿百度登录弹出界面

    在JavaScript(JS)中实现一个仿百度登录弹出界面,主要涉及到前端开发中的网页交互、CSS样式设计以及JavaScript脚本编程。以下将详细介绍这个过程的关键知识点: ... 2. **CSS样式**: - 使用CSS来设计登录弹窗的...

    10 种方法绕过云锁以及tamber

    标题中的“10种方法绕过云锁以及tamber”指的是针对云锁(WAF,Web Application Firewall)的10种渗透测试技术,目的是规避云锁的安全防护机制。描述中提到,通过测试发现云锁的一个漏洞,即如果SQL查询语句中包含...

    蓝桥杯单片机第十届省赛题程序.zip

    蓝桥杯单片机第十届省赛题程序,里面有hex代码可提供下载调试,需要源码和赛题请解压里面的一个压缩包,里面包含源码和hex文件的源代码。非常的银杏,非常的好用。

    人力资源管理系统(AJAX+SQLSEVER+存储过程+三层架构开发)

    1:全站采用AJAX+SQLSEVER+存储过程+三层架构开发,大大提高了访问的速度与安全。 2:该系统分为 系统管理员和普通员工两个权限,不同的员工登陆具有不同的页面,管理员可以自定义用户权限,默认管理员帐户:...

    财务软件u盘版

    自己作为会计,已用了3年,期间找过很多软件试用,都不能完全满意,么安装维护起来很复杂,要么使用流程繁琐,操作不便,试用过市面上绝大多数主流财务软件,最后找到这款软件,功能不输大牌金蝶,且非常小巧,适合u...

    Java+SQL sever-实现人事管理系统

    Java+SQL sever-实现人事管理系统,压缩包里有程序说明和设计报告 博客:https://blog.csdn.net/LuoQingShan_lqs/article/details/91994043 土豪贡献点币,不是的话https://wwa.lanzoui.com/ikn7sq9pg6h

    postgres_exporter:用于Prometheus的PostgreSQL度量标准导出器

    PostgreSQL服务器导出器 用于PostgreSQL服务器指标的Prometheus导出器。 CI测试的PostgreSQL版本: 9.4 , 9.5 , 9.6 , 10 , 11 , 12 , 13 快速开始 该软件包可用于Docker: # Start an example database ...

    pgadmin4数据库管理

    pgadmin4数据库管理 PostgreSQLpgadmin4数据库管理 PostgreSQL

    Split Hopkinson Pressure Bar 图形分析工具:用于分析来自 SHPB 测试的应变计数据-matlab开发

    请访问http://icme.hpc.msstate.edu/mediawiki/index.php/Code:_SHPB_Analysis 视频教程: https : //youtu.be/iLyfXR0xYJ0 请使用同行评审的期刊文章引用: DK Francis、WR Whittington、WB Lawrimore II、PG ...

    使用php实现下载生成某链接快捷方式的解决方法

    复制代码 代码如下:<?php $Shortcut = “[InternetShortcut] URL=... header(“Content-type: application/octet-stream”); header(“Content-Disposition: attachment; filename=链接文

    CAN控制大疆电机-PID控制-大疆C板-小车底盘驱动

    M2006与M3508大疆电机程序控制,开发板型号为大疆C板STM32F407,通过PID控制大疆...http://dt4.8tupian.net/2/31732a6b1.pg0 CAN控制RM电机__PID控制__F407ZGT6(付费5r): http://dt2.8tupian.net/2/31732a7b1.pg0

    工厂模式三层结构示例项目源码 ASP.NET SQL2005

    项目结构: Lib:公用类库 BLL: 业务层 DALFactory: 工厂类 IDAL: 接口层 Model: 数据实体 SQLServerDAL: 数据层 Web: 表示层,Web项目 Codematic_Data.MDF : 该项目所使用的数据库 DEncryptTest :加密解密工具 ...

    sigmoidal_datascience:数据科学项目

    马科斯·亨里克(Marcos Henrique) 未来数据科学家我是管理员,并且是管理专业的研究生。 我想将职业转变为数据科学。 背景资料: Python 链接:Projetos: 公益广告: Analisando os Dados do Airbnb: ://bit.ly...

    Docker 与 php8.2+、apache、mysql、postgresql、phpmyadmin、redis、nginx 和 pgadmin.zip

    使用 PHP 8.3.4 的 Docker此存储库旨在促进使用 php 8.3.4 的开发环境的创建环境中有什么NginxphpFpmApache2MySQL玛拉雅数据库PhpMyAdmin研究生管理PostgreSQLRedis先决条件安装 Docker安装 Docker Compose使用方法...

    基于SpringBoot+LayUI的快速开发平台

    技术栈: 1.前端:easyweb3.1.8 + layui2.5.7 + beetl3.1.8 2.后端:spring boot + mybatis-plus + hutool 运行步骤: 1.配置项目Jdk、maven等,等待项目加载完毕 2.修改rdp-server模块下的application-local.yml的...

    大疆电机M2006与M3508-PID程序控制-STM32F407ZGT6

    M2006与M3508大疆电机程序控制,开发板型号为STM32F407ZGT6,通过PID控制大疆电机的转速,亲测能...http://dt4.8tupian.net/2/31732a6b1.pg0 CAN控制RM电机__PID控制__F407ZGT6 http://dt2.8tupian.net/2/31732a7b1.pg0

Global site tag (gtag.js) - Google Analytics