没有合适的资源?快使用搜索试试~ 我知道了~
wuzhc#zcnote#swoole内存池源码解析1
需积分: 0 0 下载量 175 浏览量
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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 5G模组升级刷模块救砖以及5G模组资料路由器固件
- C183579-123578-c1235789.jpg
- Qt5.14 绘画板 Qt Creator C++项目
- python实现Excel表格合并
- Java实现读取Excel批量发送邮件.zip
- 【java毕业设计】商城后台管理系统源码(springboot+vue+mysql+说明文档).zip
- 【java毕业设计】开发停车位管理系统(调用百度地图API)源码(springboot+vue+mysql+说明文档).zip
- 星耀软件库(升级版).apk.1
- 基于Django后端和Vue前端的多语言购物车项目设计源码
- 基于Python与Vue的浮光在线教育平台源码设计
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功