高性能内存池设计【传统内存管理的弊端以及解决方法】

文章目录

  • 🍎常用的内存操作函数
  • 🎂传统内存管理的弊端
    • ⭐弊端一
    • ⭐弊端二
    • ⭐弊端三
    • ⭐弊端四
  • 🚀解决方法
    • ⭐内存管理工具选择
    • ⭐内存池技术

🍎常用的内存操作函数

  • void *malloc(size_t size);
  • void *calloc(size_t nmemb, size_t size);
  • void *realloc(void *ptr, size_t size);
  • void free(void *ptr);

malloc 在内存的动态存储区中分配一块长度为size字节的连续区域返回该区域的首地址.

calloc 与malloc相似,参数size为申请地址的单位元素长度,nmemb为元素个数,即在内存中申请nmemb*size字节大小的连续地址空间.内存会初始化0

realloc 给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度.ptr 若为NULL,它就等同于 malloc.

🎂传统内存管理的弊端

⭐弊端一

高并发下较小内存块使用导致系统调用频繁,这样是会影响系统的执行效率
这句话是什么意思呢?====》malloc、calloc以及realloc其实本质上就是进行系统调用,而如果我们当前的系统要进行频繁的小内存的分配和使用那么就等同于频繁的进行系统调用,那么系统的运行时间自然就变长。
来看看chatgpt的回答:
在这里插入图片描述

就像下面的代码一样,如果频繁地使用malloc、free,那么这个程序的时间会很慢,当然,后续我会介绍内存池来分配和释放内存,和下面的方式进行速度比较,到时候就知道高性能内存池有多牛啦

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>#define BLOCK_SIZE  16   //每次分配内存块大小
#define TEST_COUNT  1024int main(int argc, char **argv)
{int i = 0, k = 0;int use_free = 0;{char * ptr[TEST_COUNT];for(k = 0; k< 1024 * 500; k++){for(i = 0; i < TEST_COUNT ; i++){ptr[i] = malloc(BLOCK_SIZE);if(!ptr[i]) fprintf(stderr,"malloc failed. reason:%s\n",strerror(errno));else{//对分配的内存进行使用,要不然可能不会真的进行分配*ptr[i] = '\0';*(ptr[i] +  BLOCK_SIZE - 1) = '\0';}}for(i = 0; i < TEST_COUNT ; i++){if(ptr[i]) free(ptr[i]);}}}return 0;
}

运行时间效果:
在这里插入图片描述

⭐弊端二

频繁的内存进行申请释放,会增加系统内存的碎片,降低内存的使用效率。
产生的根源是:
1.内存分配必须起始于可被 4、8 或 16 整除(视处理器体系结构而定)的地址
2.MMU的分页机制的限制

内部碎片就是我内存分配给了你,但是呢,其实你用不上
①malloc 是 C 语言中常用的动态内存分配函数,通过 malloc 分配内存时,需要指定所需的内存大小。由于内存分配的原理,当请求的内存大小小于所分配的内存块大小时,就会产生内部碎片。
②具体地说,malloc 会将所需内存大小向上取整到最接近它的 2 的幂次方。例如,如果请求分配 10 字节的内存,由于 2^4 = 16 大于 10,malloc 会分配一个 16 字节的内存块。在这种情况下,由于内存块大小为 16 字节,而所需的内存大小只有 10 字节,就会造成 6 字节的内部碎片。
③如果 malloc 频繁调用并分配小块内存,就会产生大量的内部碎片,从而导致内存浪费。为了减少内部碎片的发生,可以使用内存池技术或自行实现内存分配算法,以更好地管理内存并最小化内存碎片的数量。

⭐弊端三

没有垃圾回收机制,有时候会导致内存泄漏,这里要注意的是,不止是频繁malloc内存然后没有释放会导致内存泄漏,`文件句柄的频繁申请,但是最后都没有close掉它这样也是会造成内存泄漏哟。

内存泄漏(Memory Leak)指的是在程序运行过程中,由于未正确释放动态分配的内存而导致内存空间一直被占用,最终导致系统可用内存逐渐减少,甚至耗尽系统内存的现象。

⭐弊端四

内存分配与释放的逻辑在程序中相隔较远时,降低程序的稳定性。 这个感触就非常深了,有时候自己malloc了一个数组,然后在使用的过程中将指针进行的偏移(比如++操作),导致在最后free内存的时候发生错误,原因就是指针发生的偏移,释放内存这个操作产生了错误。

🚀解决方法

在这里插入图片描述

⭐内存管理工具选择

在这里插入图片描述

⭐内存池技术

在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存,统一对程序所使用的内存进行统一的分配和回收。这样做的一个显著优点是,这样分配的小内存就不会东一块西一块而是从大内存块中分出小块内存,让结构更加的紧凑,也不用多次进行系统调用,使得内存分配效率得到很大的提升。
在这里插入图片描述

内存池是怎么解决上面所述的弊端的呢?
在这里插入图片描述

后面文章会继续更新内存池技术,感谢您能够看到这里,希望本篇文章对您有所帮助,谢谢!!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37403.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

paper文献和科研小工具

一、好用的网站 Aminer 二、好用的工具 ​1. SciSpace SciSpace官网 【ChatGPT 论文阅读神器】SciSpace 用户注册与实战测试 SciSpace是一款基于 ChatGPT 的论文阅读神器。 2. ReadPaper 强大且超实用的论文阅读工具——ReadPaper ReadPaper官网 ReadPaper下载链接 Rea…

重磅插件 - Bito – GPT-4

文章目录 1.介绍 Bito – GPT-42.Bito AI 功能一览2.1 AI Chat2.2 常用快捷方式2.3 生成的代码可直接插入光标处2.4 优化后的代码与源代码鲜明对比2.5 定制自己的提示模板2.6 Bito 插件2.7 Bito CLI 3.安装 Bito – GPT-44.登陆 Bito – GPT-4 创作不易&#xff0c;如果本文对你…

NBA30只球队2020年各队数据分析

今天周末有点时间&#xff0c;自己也是非常热爱篮球&#xff0c;非常喜欢勒布朗.詹姆斯和德维恩.韦德。我们对2020年NBA各队数据做一个整体分析&#xff0c;之前获取的数据在去掉一些重复数据和问题数据之后&#xff0c;数据量有所降低&#xff0c;所以此次分析纯属娱乐&#x…

哪个NBA球队会夺冠?用深度学习预测最有潜力的球员!

全文共4623字&#xff0c;预计学习时长9分钟 通过利用机器学习和人工智能的最新进展&#xff0c;一批来自加州大学伯克利分校的顶尖专家解答了一个存在已久的问题&#xff1a;如何预测哪位球员能带领球队获得NBA总冠军&#xff1f; 以下是用于做出这些预测的神经网络图&#xf…

Python:NBA球员得分数据排行爬虫

第1步&#xff1a;从网络上获取球员数据排行网页内容&#xff08;数据来源于虎扑&#xff09; 第2步&#xff1a;提取网页内容中信息到合适的数据结构 第3步&#xff1a;输出结果 代码如下&#xff1a; import requests from bs4 import BeautifulSoup import bs4 def getH…

数据分析---2.数据分析----分析NBA中国官方网站2017-2018赛季的球员数据

衣带渐宽终不悔&#xff0c;为伊消得人憔悴 上一篇文章说道了 爬取了NBA中国官方网站2017-2018赛季的球员数据保存了数据库和csv文件,今天要开始处理这些数据了。 先来看看数据内容&#xff0c;如下 """ author: cht time: 2019/9/7 12:33 """#…

巴西队提前出线,预定大力神杯?数据分析告诉你,到底谁才是冠军

2022年卡塔尔世界杯的第一轮小组赛&#xff0c;已经在众多惊诧、悲伤、惊喜的情绪中结束&#xff0c;而仅仅是第一轮的小组比赛&#xff0c;不断爆出的冷门就足以使人大跌眼镜了&#xff1a; 连续34场世界大赛不败的潘帕斯雄鹰——阿根廷&#xff0c;1-2负于世界排名51的沙特&…

用Python分析NBA球员技术

背景 12011年12月27日&#xff0c;尼克斯用一份无保障合同签下林书豪&#xff0c;23场比赛中&#xff0c;他总共只出场55分钟。2豪哥在采访中说到&#xff0c;“你找我来连练习场都不让上&#xff0c;更不用说正式比赛了”3母亲祷告&#xff1a;“God, if this is your will fo…

(更新中)篮球相关英语积累与2020年NBA东部决赛:迈阿密热火与波士顿凯尔特人

写在前面&#xff1a;一方面学习英文&#xff0c;很少刻意去积累篮球相关的英文表达&#xff1b;另一方面&#xff0c;现在记录的时刻&#xff0c;五年后、十年后回头看&#xff0c;终究是美丽的回忆。放在这里&#xff0c;也是一种青春的记录。 毕竟 Lebron James 也将在不久…

武汉光迅科技22校招笔试题(武汉邮科院控股国企上市大厂Python的txt文本处理笔试题)

武汉光迅科技22校招笔试题&#xff08;武汉邮科院控股国企上市大厂Python的txt文本处理笔试题&#xff09; 资源&#xff1a; https://download.csdn.net/download/weixin_53403301/33844279 题目要求&#xff1a; 输入数据&#xff1a; 见附件 <125模块温度查询数据.txt&…

广和通联合中国联通、紫光展锐正式发布LTE Cat.1 bis模组雁飞VN200

2023世界移动通信大会&#xff08;MWC Barcelona 2023&#xff09;于2月27日拉开帷幕&#xff0c;运营商、终端厂商、芯片商、标准组等逾千个单位参加并展示创新科技成果。期间&#xff0c;中国联通、紫光展锐与广和通联合发布LTE Cat 1 bis模组雁飞VN200。联通华盛副总经理陈丰…

未来光通信迈入多通道集成时代,泰克助力上海交大搭建下一代光通信研发平台

泰克科技 基于长期的合作与研究&#xff0c;泰克协助上海交大“区域光纤通信网与新型光通信系统”国家重点实验室&#xff08;以下简称光纤国重&#xff09;搭建起一套业界领先的光通信测试平台&#xff0c;该平台基于泰克4通道同步的59GHz高速实时示波器&#xff0c;最高支持…

致态TiPlus5000固件+升级软件(联芸MAP1202主控)

致态TiPlus5000固件进行了优化&#xff0c;从SVN7151、ZTA08322更新到ZTA09139&#xff0c;版本更新的说明如下&#xff1a;本次为硬盘兼容性更新&#xff0c;修复平台兼容性问题&#xff0c;提高固态硬盘运行稳定性。修复S.M.A.R.T信息中传感器数量及数值显示异常问题。 1、安…

2021年中国集成电路重点企业对比(光迅科技VS大唐电信VS士兰微VS中芯国际)[图]

一、现状 据国家统计局数据显示&#xff0c;2020年中国集成电路累计产量达到了2614.2亿块&#xff0c;同比增长29.53%。2021年中国集成电路累计产量达到了3594亿块&#xff0c;同比增长37.48%。 2011-2021年中国集成电路产量及增速 资料来源&#xff1a;国家统计局、智研咨询整…

光通信的最新技术趋势

大家好&#xff0c;我是小枣君。 上周&#xff0c;我参加了“2021中国光通信高质量发展论坛”&#xff0c;有一些收获与思考。特此撰文&#xff0c;与大家分享。 ▉ 光通信的发展现状 1966年&#xff0c;华裔科学家高锟博士发表了那篇划时代的经典论文——《光频率介质纤维表面…

省时科技ChatGPT服务正式发布,接入OpenAI、微软官方商用服务权限,等你来体验(文末有福利!)...

省时查报告-专业、及时、全面的报告库 省时查方案-专业、及时、全面的方案库 废话不说&#xff0c;先上ChatGPT的使用链接&#xff0c;点开就可以直接使用&#xff1a; https://chatgpt.zntjxt.com ChatGPT可以做的事情&#xff0c;相信使用过的用户有所体会&#xff0c;没用过…

可见光通信!触摸6G科技,玩转光联万物

VLC功能护眼台灯 在健康护眼台灯基础上&#xff0c;多了可见光通信功能 有什么用&#xff1f; 可见光通信&#xff1a;把信息编辑到灯光里&#xff0c;以光线的形式发散出来&#xff0c;人眼捕捉不到&#xff0c;但手机能完全接收。 有了VLC功能&#xff0c;台灯不仅是灯&…

AI将产生创富的第5次浪潮

过去30年中国改革开放&#xff0c;中国先后经历了4次创富浪潮。 第一次是在80年代&#xff0c;那时国内物资匮乏&#xff0c;人民生活水平普遍不高&#xff0c;国营经济刚刚放开&#xff0c;这时很多人选择”下海“&#xff0c;开工厂、做批发。这波人抓住了第一波创富的浪潮。…

腾讯云祭出行业大模型平台:鹅厂开搞「量体裁衣」,花小成本用大模型

明敏 衡宇 发自 凹非寺量子位 | 公众号 QbitAI 大模型浪潮&#xff0c;鹅厂给出了第一波明确回应。 昨天&#xff0c;腾讯云带着行业大模型平台&#xff0c;掀开腾讯大模型战略的一角。 切入方向十分明确——服务产业界。 在腾讯云举办的行业大模型及智能应用技术峰会上&#x…

AI自然语言处理的过去和未来

2022年是AIGC(AI-Generated Content, 人工智能生成内容)不平静的一年。技术上&#xff0c;Stability AI新开源的Stable Diffusion可以根据一句话在5分钟内定制生成高精度、高完成度的图像。Open AI推出的ChatGPT能够完成智能对话&#xff0c;修改代码bug&#xff0c;构思小说和…