实现一个内存池管理的类方法

发布时间 - 2026-01-10 22:23:25    点击率:

模拟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; 
   };

以上这篇实现一个内存池管理的类方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# 内存池的实现  # 详解Nginx中基本的内存池初始化配置  # 基于一个简单定长内存池的实现方法详解  # 给大家  # 希望能  # 这篇  # 小编  # 大家多多  # assign  # NULL  # m_memory  # public  # temp  # malloc  # sizeof  # size  # int  # lt  # MemoryPool  # pre  # class  # freelist  # strong 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251811 】 【 AI营销90571


相关推荐: Python正则表达式进阶教程_复杂匹配与分组替换解析  Laravel如何实现API资源集合?(Resource Collection教程)  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  太平洋网站制作公司,网络用语太平洋是什么意思?  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  如何在Windows 2008云服务器安全搭建网站?  JavaScript如何实现音频处理_Web Audio API如何工作?  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何实现javascript表单验证_正则表达式有哪些实用技巧  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  黑客如何通过漏洞一步步攻陷网站服务器?  如何用西部建站助手快速创建专业网站?  免费网站制作appp,免费制作app哪个平台好?  Android自定义控件实现温度旋转按钮效果  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  如何快速生成可下载的建站源码工具?  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  Laravel如何实现文件上传和存储?(本地与S3配置)  Laravel怎么判断请求类型_Laravel Request isMethod用法  jquery插件bootstrapValidator表单验证详解  如何基于PHP生成高效IDC网络公司建站源码?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  高端建站三要素:定制模板、企业官网与响应式设计优化  Swift中swift中的switch 语句  php打包exe后无法访问网络共享_共享权限设置方法【教程】  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  如何在IIS中新建站点并配置端口与IP地址?  轻松掌握MySQL函数中的last_insert_id()  如何在万网主机上快速搭建网站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Java遍历集合的三种方式  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  Laravel如何使用Vite进行前端资源打包?(配置示例)  教学论文网站制作软件有哪些,写论文用什么软件 ?  Laravel如何创建自定义中间件?(Middleware代码示例)  网站建设要注意的标准 促进网站用户好感度!  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  郑州企业网站制作公司,郑州招聘网站有哪些?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网