Utility中内存分配策略的示例分析
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这篇文章主要为大家展示了"Utility中内存分配策略的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Utility中内存分配策略的示例分析"这篇
千家信息网最后更新 2025年02月06日Utility中内存分配策略的示例分析从系统内存池(也就是堆)里分配内存,主要用的是ANSI定义的这几个函数 VxWorks还实现了一个专门与calloc()配合的cfree() 而到了Vx6&7,用的策略是 Best Fit,可以翻译为最优分配算法。在这种策略下,所有的空闲内存块按照尺寸从小到大排列,并使用AVL(平衡二叉树)维护。当需要申请内存时,从Root节点开始查找,满足需求且尺寸最小的内存块被分配。这种算法会保留大的内存块,提高了整体的分配成功几率,但会多出一些非常小的碎片,不过时间复杂度只有o(ln(N))。大致代码如下 当然了,不管哪种策略,在释放内存时,都会自动与前后的空闲块(如果有的话)合并。否则,系统运行一会就都是碎片了。
这篇文章主要为大家展示了"Utility中内存分配策略的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Utility中内存分配策略的示例分析"这篇文章吧。
typedef unsigned int size_t;void *malloc(size_t nBytes);void *calloc(size_t elemNum, size_t elemSize);void *realloc(void *pBlock, size_t newSize);void free(void *ptr);
typedef int _Vx_STATUS;typedef _Vx_STATUS STATUS;STATUS cfree(char *pBlock);
而存放在堆里的那些内存块具体是如何管理的呢?
Vx5用的策略是First Fit,可以翻译为最先分配算法。在这种策略下,所有的空闲内存块按照地址从低到高排列。当需要申请内存时,从低地址开始查找,第一块满足需求的内存块被分配。所以当系统申请内存的次数比较多了之后,低地址就会留下大量小块内存,导致后期的查找时间略长。大致代码如下
void *memXxxAlloc ( PART_ID partId, /* memory partition to allocate from */ unsigned nBytes, /* number of bytes to allocate */ unsigned alignment/* boundary to align to */ ){ ... DL_NODE *pNode = DLL_FIRST(&partId->freeList); ... while(pNode != NULL) { /* fits if: * - blocksize > requested size + extra room for alignment or, * - block is already aligned and exactly the right size */ if ((NODE_TO_HDR (pNode)->nWords > nWordsExtra) || ((NODE_TO_HDR (pNode)->nWords == nWords) && (ALIGNED (HDR_TO_BLOCK(NODE_TO_HDR(pNode)), alignment)))) break; pNode = DLL_NEXT (pNode); } ... }
AVLU_NODE *avlXxxGet ( AVLU_TREE root, /* root node pointer */ UINT key /* search key */ ) { AVLU_NODE *pNode; AVLU_NODE *pSuccessor; pNode = root; pSuccessor = NULL; while (pNode != NULL) { if (key >= pNode->key) { pNode = pNode->right; } else { pSuccessor = pNode; pNode = pNode->left; } } return (pSuccessor); }
计算机专业的童鞋应该知道还有一种策略叫Worst Fit,可以翻译为最差分配算法。在这种策略下,所有的空闲内存块按照尺寸从大到小排列。当需要申请内存时,要么分配第一块,要是失败。所以这种算法的分配速度最快,而且很少有小碎片,但是容易造成大块内存申请失败,所以适合待分配内存块比较统一的情况。
以上是"Utility中内存分配策略的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
内存
分配
策略
算法
空闲
示例
分析
内容
地址
尺寸
碎片
篇文章
系统
译为
代码
时间
需求
学习
帮助
复杂
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
保护网络安全公约
网吧服务器怎么办理
未找到服务器
畅捷通数据库实例名
fifa19正在连接服务器
rust破解版服务器
深川萌丫网络技术有限公司
网络安全学习网哪个便宜
军营网络安全警示教育片
四川大学生在线网络安全专业
软件开发的8个生产周期
计算机网络技术是什么合成的
什么叫数据库的结构设计
王者荣耀可以换服务器可以继承吗
网络安全学院的目的
常德软件开发中介
3g软件开发专业方向
反诈中心找回密码一直服务器繁忙
意识形态汇报网络安全
数据库开发指南
广州网络安全相关培训白盒测试
隐藏木马服务器端的方法
如何支持网络安全审查法
达梦数据库连接池满了
黑龙江php软件开发
鼎游网络技术有限公司
阿里ads数据库sql语法
重庆软件开发驻场哪家实惠
数据库表怎么实现多表关联
软件开发课题名称