实现一个内存池管理的类
模拟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; };
实现一个内存池管理的类相关推荐
- 两种内存池管理方法对比
一.问题背景 最近在调试ambiq apollo3的蓝牙时,其使用了ARM Cordio WSF的蓝牙协议栈.通过学习wsf_buf.c的实现,看到了一种不同于固定大小内存块的内存池管理方式.它使用了 ...
- LWIP再探----内存池管理
这这里是接上一篇内存池管理部分的,这里如果读者一打开memp.c的话会感觉特别那一理解原作者在干嘛,但是看懂了就明白原作者是怎么巧妙的使用了宏.废话不多说先说了下我分析是一下宏的条件是 前提条件 ME ...
- 实现自己的operator new和operator delete以及实现一个简单的内存池管理类
为什么有必要写自己的operator new和operator delete? 为了效率.缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特 ...
- Python内存池管理与缓冲池设计
出处:http://blog.csdn.net/zhzhl202/article/details/7547445#t4 Python是一门开发效率很高的语言,而且其既下里巴人,又阳春白雪.也就是说这门 ...
- 从零开始学ESP32:(四)ESP32/freeRTOS 实现一个内存池操作
零开始学ESP32:个人笔记记录: 芯片型号: ESP32 网络环境支持:LWIP IDF.PY-SDK: ESP-IDF v4.3 芯片功能: freeRTOS系统 声明: 当前内存池参考 Linu ...
- Android 线程池管理工具类
转自Android 线程池 public class AppExecutors {private static final String TAG = "AppExecutors"; ...
- DPDK内存篇(三): 标准大页、NUMA、DMA、IOMMU、IOVA、内存池
作者简介:Anatoly Burakov,英特尔软件工程师,目前在维护DPDK中的VFIO和内存子系统. 目录 引言 标准大页 将内存固定到NUMA节点 硬件.物理地址和直接内存存取(DMA) IOM ...
- android内存池,两种常见的内存管理方法:堆和内存池
描述 本文导读 在程序运行过程中,可能产生一些数据,例如,串口接收的数据,ADC采集的数据.若需将数据存储在内存中,以便进一步运算.处理,则应为其分配合适的内存空间,数据处理完毕后,再释放相应的内存空 ...
- Wireshark----wmem 内存池、内存管理的学习--README.wmem 翻译
1. 什么是内存池? 当创建大量消耗小内存的对象时,频繁调用new/malloc会导致大量的内存碎片,致使效率降低.内存池的概念就是预先在内存中申请一定数量的,大小相等 的内存块留作备用,当有新的内存 ...
- 一个轻量级内存池的实现与细节
引言 内存池作为一种的内存管理机制被广泛地运用于各种领域当中,内存池拥有快速的内存分配与更加健壮的管理机制,同时在不同的平台与环境当中也拥有不同的实现方式,本文提出一种轻量级的内存池实现,可以非常方便 ...
最新文章
- 拜托!不要用“ ! = null 做判空了
- 函数中{}输出格式详解(C#)
- NDK,动态链接库,JNI
- MySQL优化器:index merge介绍
- 漫画 | 如何凭实力炒老板鱿鱼,并喜提N+1~
- Z-blog拓源纯净主题
- Python入门1_数字表达式
- 误区30日谈21-24
- python统计元音总数_python – 元音序列计数
- 因果推断笔记——数据科学领域因果推断案例集锦(九)
- FLEX中restrict限定TextInput输入
- H3C 静态路由的配置
- 【Gym-101889 D】Daunting device【分块】
- 安装了java后,为什么有些jar不能执行
- python基础教程:Python实现动态给类和对象添加属性和方法操作示例
- 无力吐槽的废酱的几个问题
- ​五分钟扫盲:进程与线程基础必知
- 分享购的逻辑是什么?
- 网卡IP地址信息一键查看工具V1.0-免费版
- 英飞凌TC265双核单片机入门——点灯和发CAN(FD)报文
热门文章
- 磊科路由器怎么设置虚拟服务器,磊科无线路由器静态IP地址分配如何配置
- js获取 本周,本月的日期
- java 代码佛像_论面向组合子程序设计方法 之九 南无阿弥陀佛
- Math常用的数学运算(包括取整、取绝对值、保留几位小数等)
- 小米刷机指南 |使用MiFlash刷机一直flashing|小米手机忘记密码|小米手机清理数据
- 计算机教师面试试讲教案模板,【试讲模板】中学信息技术面试试讲之《绘制标题》...
- youtube打开显示服务器更新,youtube-dl更新出错解决办法
- 若依代码生成使用教程
- 系统工程师之路----送给自己和技术道路迷茫的朋友们
- WIN10重置网络后网络适配器不见了并且适配器驱动感叹号