没有合适的资源?快使用搜索试试~ 我知道了~
wuzhc#zcnote#swoole内存池源码解析1
需积分: 0 0 下载量 153 浏览量
2022-07-25
14:35:14
上传
评论
收藏 6KB MD 举报
温馨提示
swMemoryGlobal维护着一个链表,每个节点即swMemoryGlobal_page,root_page指向第一个节点,current_page指向当前
资源推荐
资源详情
资源评论
### 内存池的作用:
直接使用系统调用malloc会有如下弊端:
- 频繁分配内存时会产生大量内存碎片
- 频繁分配内存增加系统调用开销
- 容易造成内存泄漏
> 内存池是预先申请一定数量的,大小相等的内存块作为预备使用;当需要时向内存池分出一部分内存,若内存块不够使用时再向系统申请新的内存块,下面就swoole的swMemoryGlobal内存池作为分析例子
### swoole swMemoryPool 数据结构设计
swMemoryGlobal是swoole内存池实现一种方式,学习内存池主要是要掌握其数据结构的设计,memoryGlobal实现如下:
```c
// src/memory/MemoryGlobal.c
typedef struct _swMemoryPool
{
void *object; // 指向swMemoryGlobal指针
void* (*alloc)(struct _swMemoryPool *pool, uint32_t size); // 分配内存函数指针
void (*free)(struct _swMemoryPool *pool, void *ptr); // 是否内存函数指针
void (*destroy)(struct _swMemoryPool *pool); // 销毁内存函数指针
} swMemoryPool;
typedef struct _swMemoryGlobal
{
uint8_t shared;
uint32_t pagesize; // 指定每个swMemoryGlobal_page需要申请内存大小
swLock lock; // 互斥锁
swMemoryGlobal_page *root_page; // 指向第一个swMemoryGlobal_page指针,有头指针可以销毁内存池
swMemoryGlobal_page *current_page; // 指向当前swMemoryGlobal_page指针
uint32_t current_offset;
} swMemoryGlobal;
typedef struct _swMemoryGlobal_page
{
struct _swMemoryGlobal_page *next; // 指向下一个节点
char memory[0]; // 这是一个柔性数组,用于记录申请内存后的内存地址
} swMemoryGlobal_page;
```
这三者之间的关系如下:
点击阅读更多
资源评论
普通网友
- 粉丝: 20
- 资源: 314
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- dbeaver-ce-24.3.1-x86-64-setup.exe
- 国际象棋桌子检测6-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
- 某平台广告投入分析与销售预测
- 连接ESP32手表来做验证20241223-140953.pcapng
- 小偏差线性化模型,航空发动机线性化,非线性系统线性化,求解线性系统具体参数,最小二乘拟合 MATLAB Simulink 航空发动机,非线性,线性,非线性系统,线性系统,最小二乘,拟合,小偏差,系统辨
- 好用的Linux终端管理工具,支持自定义多行脚本命令,密码保存、断链续接,SFTP等功能
- Qt源码ModbusTCP 主机客户端通信程序 基于QT5 QWidget, 实现ModbusTCP 主机客户端通信,支持以下功能: 1、支持断线重连 2、通过INI文件配置自定义服务器I
- QGroundControl-installer.exe
- 台球检测40-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 颜色拾取器 for Windows
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功