IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 内存池的实现与场景分析 -> 正文阅读

[数据结构与算法]内存池的实现与场景分析

内存池是对malloc在堆上申请出来的空间进行的管理!

内存池作用:(内存池要用但不要自己造,要懂他的原理)

避免频繁分配内存(recv之前malloc一块空间,让recv函数来用,这种方式内存会被频繁分配释放和使用,会造成内存碎片化,这样当我们再次申请一块大内存的时候会遇到分配失败的情况。)

内存池:jemalloc,tcmalloc

避免频繁分配与释放方法:

1. 使用链表,每次malloc把块加入到链表中,不释放,调用free的时候直接在结构体里设置一个flag

struct memnode {
    void *addr;
    int size;
    int flag;//1用0free
    struct memnode *next;
};

struct memnode *mempool;

void *nmalloc(void) {

    search
    void *addr = malloc();
    struct memnode *node;
    ADD(mempool, node);
}

void free(void *addr) {
}

2. 分配固定大小块,第一个分配16字节,第二个分配32字节……第6个分配512字节。直接for循环看当前需要的内存块比谁小,这种方式可以防止到后期链表越来越长的现象。这种是为了避免内存碎片,所以大于512的块就直接malloc就好。(这种方式让我想起了STL的alloc)

3. 感觉就是STL的alloc分配方式了,一个数组里每个元素挂一个内存队列,先查找是否能找到能用的内存,如果能找到就直接从队列里面取出来,如果没有就malloc挂到队列里。释放的时候就把这块内存再挂到队列里。

问题:

? ? ? ? 1. 缺点在于链表查找速度慢(分配的时候查找内存块是否可用,释放的时候查找内存块),解决:可以准备两个集合,一个是用的一个是没用的;查找对应的节点可以使用Hash或者红黑树rbtree

? ? ? ? 2. 出现间隙:相同大小快的内存可能不是分配在一起,这种会造成小块回收的影响,但是对于一个连接对应一个内存池不需要做小块的回收。小块内存回收是一个极其麻烦的事情

内存池使用场景:1.全局内存池(jemalloc/tcmalloc)?2.针对每一个连接fd做一个内存池 3.为每一个消息做一个内存池

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:48:42  更:2022-03-24 00:51:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:59:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码