模拟STL中的freelist,有这个思想在内。

union obj
{union obj* next;char p[1];
};class MemoryPool
{ public:MemoryPool(){union obj* temp;m_memory.assign(5,(union obj*)NULL);         for(int i=0;i<m_memory.size();i++){for(int j=0;j<m_memory.size();j++){temp = (obj*)malloc(sizeof(char)*(1<<(i+3)));     temp->next = m_memory[i];m_memory[i] = temp; }}}char* mem_get(int size){int j;if( size > 128){char* start = (char*)malloc(sizeof(char)*size);return start; }int index = freelist_index(size);obj* temp = m_memory[index];if(temp == NULL)  //{for(j = index+1;j<m_memory.size();j++){temp = m_memory[j];if(temp != NULL){m_memory[j] = temp->next;break;       }     }if(j>= m_memory.size()){for(int j=0;j<m_memory.size();j++){temp = (obj*)malloc(sizeof(char)*(1<<(index+3)));     temp->next = m_memory[index];m_memory[index] = temp; }  temp = m_memory[index];m_memory[index] = temp->next;return (char*)temp;}else{obj* cur;int up_size = round_up(size);for(int i=0;i<(1<<(j-index));i++){cur =  temp;cur->next = m_memory[index];m_memory[index] = cur;temp = cur+up_size;} temp = m_memory[index];m_memory[index] = temp->next;return (char*)temp;}     }else{ m_memory[index] = temp->next;return (char*)temp; }}void mem_free(void* p,int size){if(size > 128){free(p);return ;   }   obj* temp = (obj*)p;int index = freelist_index(size);temp->next = m_memory[index];m_memory[index]  = temp;}private:enum {_ALIGN = 8};//int freelist_index(int __bytes) {return (((__bytes) + (int)_ALIGN-1)/(size_t)_ALIGN - 1);}int round_up(int __bytes) { return (((__bytes) + (int) _ALIGN-1) & ~((int) _ALIGN - 1)); }vector<union obj*> m_memory; };

实现一个内存池管理的类相关推荐

  1. 两种内存池管理方法对比

    一.问题背景 最近在调试ambiq apollo3的蓝牙时,其使用了ARM Cordio WSF的蓝牙协议栈.通过学习wsf_buf.c的实现,看到了一种不同于固定大小内存块的内存池管理方式.它使用了 ...

  2. LWIP再探----内存池管理

    这这里是接上一篇内存池管理部分的,这里如果读者一打开memp.c的话会感觉特别那一理解原作者在干嘛,但是看懂了就明白原作者是怎么巧妙的使用了宏.废话不多说先说了下我分析是一下宏的条件是 前提条件 ME ...

  3. 实现自己的operator new和operator delete以及实现一个简单的内存池管理类

    为什么有必要写自己的operator new和operator delete? 为了效率.缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特 ...

  4. Python内存池管理与缓冲池设计

    出处:http://blog.csdn.net/zhzhl202/article/details/7547445#t4 Python是一门开发效率很高的语言,而且其既下里巴人,又阳春白雪.也就是说这门 ...

  5. 从零开始学ESP32:(四)ESP32/freeRTOS 实现一个内存池操作

    零开始学ESP32:个人笔记记录: 芯片型号: ESP32 网络环境支持:LWIP IDF.PY-SDK: ESP-IDF v4.3 芯片功能: freeRTOS系统 声明: 当前内存池参考 Linu ...

  6. Android 线程池管理工具类

    转自Android 线程池 public class AppExecutors {private static final String TAG = "AppExecutors"; ...

  7. DPDK内存篇(三): 标准大页、NUMA、DMA、IOMMU、IOVA、内存池

    作者简介:Anatoly Burakov,英特尔软件工程师,目前在维护DPDK中的VFIO和内存子系统. 目录 引言 标准大页 将内存固定到NUMA节点 硬件.物理地址和直接内存存取(DMA) IOM ...

  8. android内存池,两种常见的内存管理方法:堆和内存池

    描述 本文导读 在程序运行过程中,可能产生一些数据,例如,串口接收的数据,ADC采集的数据.若需将数据存储在内存中,以便进一步运算.处理,则应为其分配合适的内存空间,数据处理完毕后,再释放相应的内存空 ...

  9. Wireshark----wmem 内存池、内存管理的学习--README.wmem 翻译

    1. 什么是内存池? 当创建大量消耗小内存的对象时,频繁调用new/malloc会导致大量的内存碎片,致使效率降低.内存池的概念就是预先在内存中申请一定数量的,大小相等 的内存块留作备用,当有新的内存 ...

  10. 一个轻量级内存池的实现与细节

    引言 内存池作为一种的内存管理机制被广泛地运用于各种领域当中,内存池拥有快速的内存分配与更加健壮的管理机制,同时在不同的平台与环境当中也拥有不同的实现方式,本文提出一种轻量级的内存池实现,可以非常方便 ...

最新文章

  1. 拜托!不要用“ ! = null 做判空了
  2. 函数中{}输出格式详解(C#)
  3. NDK,动态链接库,JNI
  4. MySQL优化器:index merge介绍
  5. 漫画 | 如何凭实力炒老板鱿鱼,并喜提N+1~
  6. Z-blog拓源纯净主题
  7. Python入门1_数字表达式
  8. 误区30日谈21-24
  9. python统计元音总数_python – 元音序列计数
  10. 因果推断笔记——数据科学领域因果推断案例集锦(九)
  11. FLEX中restrict限定TextInput输入
  12. H3C 静态路由的配置
  13. 【Gym-101889 D】Daunting device【分块】
  14. 安装了java后,为什么有些jar不能执行
  15. python基础教程:Python实现动态给类和对象添加属性和方法操作示例
  16. 无力吐槽的废酱的几个问题
  17. ​五分钟扫盲:进程与线程基础必知
  18. 分享购的逻辑是什么?
  19. 网卡IP地址信息一键查看工具V1.0-免费版
  20. 英飞凌TC265双核单片机入门——点灯和发CAN(FD)报文

热门文章

  1. 磊科路由器怎么设置虚拟服务器,磊科无线路由器静态IP地址分配如何配置
  2. js获取 本周,本月的日期
  3. java 代码佛像_论面向组合子程序设计方法 之九 南无阿弥陀佛
  4. Math常用的数学运算(包括取整、取绝对值、保留几位小数等)
  5. 小米刷机指南 |使用MiFlash刷机一直flashing|小米手机忘记密码|小米手机清理数据
  6. 计算机教师面试试讲教案模板,【试讲模板】中学信息技术面试试讲之《绘制标题》...
  7. youtube打开显示服务器更新,youtube-dl更新出错解决办法
  8. 若依代码生成使用教程
  9. 系统工程师之路----送给自己和技术道路迷茫的朋友们
  10. WIN10重置网络后网络适配器不见了并且适配器驱动感叹号