• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 实现一个内存池管理的类方法

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了内存池实现,c语言内存池实现,内存池,可用的页池内存,lwip内存池定义等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 实现一个内存池管理的类方法
  • 模拟实现C语言中的内存管理

相关文章

  • 2017-05-28VC动态生成菜单项的实现方法
  • 2017-05-28C++中静态存储区与栈以及堆的区别详解
  • 2017-05-28C++开发的Redis数据导入工具优化
  • 2017-05-28深入学习C语言中memset()函数的用法
  • 2017-05-28C语言递归操作用法总结
  • 2017-05-28利用C++实现从std::string类型到bool型的转换
  • 2017-05-28解析C++编程中异常相关的堆栈展开和throw()异常规范
  • 2017-05-28C语言实现单链表逆序与逆序输出实例
  • 2017-05-28c语言中 基于随机函数的使用详解
  • 2017-05-28C语言编程中统计输入的行数以及单词个数的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c++获取进程信息列表和进程所调用的dll列表
    • C++判断pe文件实例
    • C++对象的动态建立与释放详解
    • C++使用递归方法求n阶勒让德多项式完整实例
    • C++中指针的数据类型和运算相关知识小结
    • 详解C++中的函数调用和下标以及成员访问运算符的重载
    • 深入分析C++中deque的使用
    • 剖析C++编程当中指针作为函数参数的用法
    • C++采用openfilename打开文件对话框用法实例
    • 详解C语言中的常量指针和指针常量

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有