话说
MemoryContextMethods
结构里的函数实现了pg
里AllocSet/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
,把小于8k
的AllocChunk
加到传进来的AllocSet
中空闲AllocChunk
链表数组freelist
中同样大小的AllocChunk
链表头部。大于8k
的AllocChunk
是根据需要分配的只包含一个AllocChunk
的AllocBlock
,找到包含超大AllocChunk
的AllockBlock
,释放该AllocBlock
以备其他需要时malloc
,如果没有找到大于8k
的AllocChunk
的AllocBlock
,在日志中写错误记录。具体看流程图吧。
- 大小: 48.3 KB
分享到:
相关推荐
055PG.com_055pg.com_www.055PG.COM_https//:055"似乎是一个标识符,结合描述中的"AXI Memory Mapped to PCI Express (PCIe)",我们可以推测这可能是一份关于在系统设计中使用AXI(Advanced eXtensible Interface)...
很抱歉,但根据您给出的信息,标题、描述和标签中的链接看似是搜索引擎的查询URL,它们并没有提供关于特定IT知识点的直接信息。压缩包子文件的文件名称列表包括"QQ空间人气精灵.exe"、"更新内容.txt"、"免责声明.txt...
一款基于freekan影视系统二次开发的影视网站源码,增加会员系统,卡密系统,会员分组系统,自带解析接口,整体来说不错!安装界面无线跳转检查伪静态文件PHP版本建议5.4至5.6!播放页面排版错误请检查后台域名是否正确...
在JavaScript(JS)中实现一个仿百度登录弹出界面,主要涉及到前端开发中的网页交互、CSS样式设计以及JavaScript脚本编程。以下将详细介绍这个过程的关键知识点: ... 2. **CSS样式**: - 使用CSS来设计登录弹窗的...
二、搜索 可以根据文件名查找图片。支持查找的游戏列表详见附录1 搜索支持模糊查找、区分大小写和正则表达式,正则表达式的具体定义参见附录3 三、导出(支持bmp、jpg、png和mng格式,mng格式的说明参见附录2。另外...
标题中的“10种方法绕过云锁以及tamber”指的是针对云锁(WAF,Web Application Firewall)的10种渗透测试技术,目的是规避云锁的安全防护机制。描述中提到,通过测试发现云锁的一个漏洞,即如果SQL查询语句中包含...
蓝桥杯单片机第十届省赛题程序,里面有hex代码可提供下载调试,需要源码和赛题请解压里面的一个压缩包,里面包含源码和hex文件的源代码。非常的银杏,非常的好用。
1:全站采用AJAX+SQLSEVER+存储过程+三层架构开发,大大提高了访问的速度与安全。 2:该系统分为 系统管理员和普通员工两个权限,不同的员工登陆具有不同的页面,管理员可以自定义用户权限,默认管理员帐户:...
自己作为会计,已用了3年,期间找过很多软件试用,都不能完全满意,么安装维护起来很复杂,要么使用流程繁琐,操作不便,试用过市面上绝大多数主流财务软件,最后找到这款软件,功能不输大牌金蝶,且非常小巧,适合u...
Java+SQL sever-实现人事管理系统,压缩包里有程序说明和设计报告 博客:https://blog.csdn.net/LuoQingShan_lqs/article/details/91994043 土豪贡献点币,不是的话https://wwa.lanzoui.com/ikn7sq9pg6h
PostgreSQL服务器导出器 用于PostgreSQL服务器指标的Prometheus导出器。 CI测试的PostgreSQL版本: 9.4 , 9.5 , 9.6 , 10 , 11 , 12 , 13 快速开始 该软件包可用于Docker: # Start an example database ...
pgadmin4数据库管理 PostgreSQLpgadmin4数据库管理 PostgreSQL
请访问http://icme.hpc.msstate.edu/mediawiki/index.php/Code:_SHPB_Analysis 视频教程: https : //youtu.be/iLyfXR0xYJ0 请使用同行评审的期刊文章引用: DK Francis、WR Whittington、WB Lawrimore II、PG ...
复制代码 代码如下:<?php $Shortcut = “[InternetShortcut] URL=... header(“Content-type: application/octet-stream”); header(“Content-Disposition: attachment; filename=链接文
M2006与M3508大疆电机程序控制,开发板型号为大疆C板STM32F407,通过PID控制大疆...http://dt4.8tupian.net/2/31732a6b1.pg0 CAN控制RM电机__PID控制__F407ZGT6(付费5r): http://dt2.8tupian.net/2/31732a7b1.pg0
项目结构: Lib:公用类库 BLL: 业务层 DALFactory: 工厂类 IDAL: 接口层 Model: 数据实体 SQLServerDAL: 数据层 Web: 表示层,Web项目 Codematic_Data.MDF : 该项目所使用的数据库 DEncryptTest :加密解密工具 ...
马科斯·亨里克(Marcos Henrique) 未来数据科学家我是管理员,并且是管理专业的研究生。 我想将职业转变为数据科学。 背景资料: Python 链接:Projetos: 公益广告: Analisando os Dados do Airbnb: ://bit.ly...
M2006与M3508大疆电机程序控制,开发板型号为STM32F407ZGT6,通过PID控制大疆电机的转速,亲测能...http://dt4.8tupian.net/2/31732a6b1.pg0 CAN控制RM电机__PID控制__F407ZGT6 http://dt2.8tupian.net/2/31732a7b1.pg0
http://books.google.ae/books?id=I5EnKiZm3uUC&hl=zh-CN&pg=PA142&img=1&zoom=3&hl=zh-CN&sig=ACfU3U2qvQpFCQXmO6ndeha1ftAJyIuS0A&w=800&gbd=1 ...