首页 > 其他分享 >2月3日总结

2月3日总结

时间:2024-02-06 15:13:29浏览次数:30  
标签:总结 int 链表 MemoryPool 内存 设计 MemoryBlock

所谓内存池,顾名思义和线程池的设计原理是一样的,为了减少频繁申请释放内存而带来的资源消耗,减少释放内存后产生的内存碎片。
设计理念

为了方便管理内存池的设计通常是划分出一定数量的内存块,这些内存块的长度是一样的; 用户申请内存块时返回空闲的内存块地址,如果内存块使用完毕就释放该内存块,将该内存块置为空闲状态,放回到内存池,供以后使用。

内存池的设计核心几大模块:创建内存池,申请内存块,释放内存块,销毁内存池!

当然这只是常用的内存池设计,实际项目中可以根据需求设计不同的线程池:内存块的长度不一,可以提供自定义的内存块设计等兼容性更高的内存池。

本文只做内存池原理的讲解和实现最基础的内存池!更多的功能根据实际的需求进行扩展即可。

内存池的设计思路有很多,可以给予链表,数组,队列等进行设计,核心就是怎么存储内存块信息;本期是基于链表进行的内存池设计。
模块设计
内存池结构

内存块节点结构

typedef struct MemoryBlock{
void *data;//内存块起始地址
struct MemoryBlock *next;//下一个内存块的地址
}MemoryBlock;

内存池结构

typedef struct MemoryPool{
MemoryBlock *freeList;//空闲内存块链表
MemoryBlock *usedList;//占用内存块链表
int freeCount;//空闲内存块数量
int usedCount;//占用内存块数量
int blockCount;//内存块总数量
}MemoryPool;

创建内存池

通过参数确定内存池中内存块的大小和数量,然后给每个内存块开辟空间,然后初始化空闲链表,占用链表,空闲数量,占用数量等

MemoryPool *InitMemoryPool(int blockSize, int blockCount)
{
MemoryPool *pool = NULL;

pool = (MemoryPool *)malloc(sizeof(MemoryPool));//为内存池分配空间
pool->freeList = NULL;
pool->usedList = NULL;
for(int i = 0; i < blockCount; i++)
{

标签:总结,int,链表,MemoryPool,内存,设计,MemoryBlock
From: https://www.cnblogs.com/lmyy/p/18009768

相关文章

  • 2月2日总结
    1.1OpenVINO™C#API英特尔发行版OpenVINO™工具套件基于oneAPI而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界结果部署到生产系统中。通过简化的开发工作流程,OpenVINO™可赋能开......
  • Beginctf赛后总结
    cryptofake_nfromCrypto.Util.numberimport*fromsecretimportflag​deffakeN_list():  puzzle_list=[]​  foriinrange(15):    r=getPrime(32)    puzzle_list.append(r)​  p=getPrime(32)  q=getPrime(32)  com=p*q......
  • 2月1日总结
    背景随着LLM技术应用及落地,数据库需要提高向量分析以及AI支持能力,向量数据库及向量检索等能力“异军突起”,迎来业界持续不断关注。简单来说,向量检索技术以及向量数据库能为LLM提供外置的记忆单元,通过提供与问题及历史答案相关联的内容,协助LLM返回更准确的答案。不仅仅是LLM,......
  • beginctf 赛后总结
    cryptofake_nfromCrypto.Util.numberimport*fromsecretimportflagdeffakeN_list():puzzle_list=[]foriinrange(15):r=getPrime(32)puzzle_list.append(r)p=getPrime(32)q=getPrime(32)com=p*qpu......
  • 2023年终总结
    2023年度总结前言总结展望2023年度总结前言2023年在不知不觉中已经过去了,每到年底总是感叹时光的飞逝,每次回想当年所做的事情,能想起来的只有平淡二字,可能平淡,才是我人生真正的主旋律吧。总结总结下今年做的几件大事1、生活中,在公司顺利的拿到了落户上海的名额,户口......
  • 复杂系统 | 考前知识点总结(不完全)
    这份知识点总结(cheatsheet)是基于21年入学直博的师兄的押题(因为我没太听课......
  • 今日总结
    Spark软件安装包下载:http://spark.apache.org/downloads.html默认情况下,可以下载官方提供的针对Apache不同版本的Hadoop编译的软件包,但是在实际企业项目开发中下载Spark对应版本源码,依据所使用的Hadoop版本进行编译,同时不会使用CDH5.x提供Spark版本(其一:Spark版本太低;其二:CDH版......
  • 2024年2月5号总结
    P1194买礼物洛谷题目链接解题思路这个题目是一个最小生成树或者说是贪心的题目,在这里我们把买的东西定义成顶点,边是优惠的价格那么我们只要把每一个顶点连接起来可以了,但要注意优惠的价格​ 可能大于A,因此我们要比较A的价格和优惠的价格谁的花费少接下来就是最小生成树的......
  • 每日总结
    Scala是ScalableLanguage的简写,是一门多范式的编程语言联邦理工学院洛桑(EPFL)的MartinOdersky于2001年基于Funnel的工作开始设计Scala。Funnel是把函数式编程思想和Petri网相结合的一种编程语言。Odersky先前的工作是GenericJava和javac(SunJava编译器)。Java平台的Scala于......
  • 2024.2.5寒假每日总结27
    LeetCode跳跃游戏VI1696.跳跃游戏VI-力扣(LeetCode)题目描述给你一个下标从0开始的整数数组nums和一个整数k。一开始你在下标0处。每一步,你最多可以往前跳k步,但你不能跳出数组的边界。也就是说,你可以从下标i跳到[i+1,min(n-1,i+k)]包含两个端点的任......