当前位置: 首页 > news >正文

ps模板网站小程序文档

ps模板网站,小程序文档,外汇交易平台网站建设,建网站哪家质量好1.什么是内存池 1.1 池化技术 将程序中需要经常使用的核心资源先申请出来#xff0c;放在一个池内#xff0c;由程序自己管理#xff0c;这样可以提高资源的使用效率#xff0c;也可以保证本程序占有的资源数量。 比如之前博文实现的线程池#xff0c;就是预先的申请出… 1.什么是内存池 1.1 池化技术 将程序中需要经常使用的核心资源先申请出来放在一个池内由程序自己管理这样可以提高资源的使用效率也可以保证本程序占有的资源数量。 比如之前博文实现的线程池就是预先的申请出来一些线程当有任务被推送到任务队列时线程池内的线程立即开始处理任务不需要在程序内一次次的创建线程、关闭线程等。 1.2 内存池 普通场景下当程序长时间运行或多或少有相关内容会去申请内存资源由于这些申请的内存块大小不一会造成大量的内存碎片从而降低程序和操作系统的效率。内存池就是在使用内存空间之前先整体申请分配一大块内存内存池当需要申请内存时从内存池中取出一块进行动态分配当该内存被释放时将释放过后的内存在放回池内并尽量与周边的空闲内存块合并以减少外内存碎片重复利用。若内存池不够时则自动扩大内存池从操作系统中申请更大的内存池。 1.2.1 内存池的意义 有两个好处 1、由于向内存申请的内存块都是比较大的所以能够降低外碎片问题。 2、一次性向内存申请一块大的内存慢慢使用避免了频繁的向内存请求内存操作提高内存分配的效率。 1.2.2 内存碎片 外内存碎片 系统经过一系列的分配内存和回收内存当遇到需要分配一大块内存空间时剩余内存空间的总数够但是内存空间不连续导致无法分配。 内内存碎片 内部碎片是指一个已分配的块比有效载荷大时发生的。(假设以前分配了10个大小的字节现在只用了5个字节则剩下的5个字节就会内碎片)。内部碎片的大小就是已经分配的块的大小和他们的有效载荷之差的和。因此内部碎片取决于以前请求内存的模式和分配器实现的模式。 2. 定长内存池 在实现高并发内存池之前先写一个假定每次申请的内存空间都是固定值的内存池即定长内存池。 介绍 实现一个 FreeList每个 FreeList 用于分配固定大小的内存块比如用于分配 32字节对象的固 定内存分配器等使用模板使定长内存池可以根据分配的对象而发生改变。定长内存池中有两个指针 _memory和_freeList 。_memory是指向大块内存的指针当需要分配内存的时候他根据模板类型字节数向后移动将该块内存分配出去。_freeList是指向由还回的内存块的链接而成的链表的头指针。分配时如果内存池中剩余不够我们就再创建一个新的大块不必保存前一块大内存的地址因为如果它始终被占用申请空间时就用不上它如果它后续被释放也会进入_freeList供我们再次使用。 2.1 定长内存池——回收内存 先上框架 templateclass T class ObjectPool { public://分割内存块 T* New(){}//回收内存void Delete(T* obj) //obj所指向的这一块空间被回收了{}private:char* _memory nullptr;//指向大块内存的指针size_t _remainBytes 0;//大块内存存在切分过程中的剩余字节数void* _freeList nullptr;//还回来的内存块由_freeList指针指向的链表链接起来 };由于每个内存块回收后都是放到_freeList里面形成一个单链表。所以内存块中的起始一部分空间需要变成 一个指针指向下一个节点。 情况一当单链表为空的时候回收一个内存块。首先需要将当前内存块中的第一个指针大小的空间置成nullptr。然后使指向当前内存块的指针作为单链表的头结点。情况二当单链表不为空的时候回收一个内存块。首先如果使用尾插法那么每次都需要遍历一遍链表时间复杂度高所以我们采用头插法。先让当前内存块中的第一个指针大小的空间的置成单链表的头结点然后将头结点赋给指向当前内存块的指针问题我们要想将归还的内存块使用一张链表链接起来那么这个内存块一定需要大于一个指针的大小不然我们无法修改内存块的前指针变量个大小的字节使其指向下一块归还的内存。 但是在32位和64位平台下指针的大小是不一致的。我们怎么知道使用者处于哪个平台 针对于这一问题本质是由于指针变量的大小不确定。但是真正处于某一平台下指针的大小是唯一的。所以我们不应该显示的规定将前4个或8个字节进行修改而应该使用一种可以依平台而定的修改方案即按照当前平台的指针变量大小作为需要修改的字节数。 采用解引用 (void**)obj || (int**)obj || || (char**)obj 而非依平台而定解引用 (int*)obj || (long long*)obj void Delete(T* obj) //obj所指向的这一块空间被回收了{/* if (_freelist nullptr){*(void**)obj nullptr;_freelist obj;}else{*(void**)obj _freelist;_freelist obj;}发现_freeList是空的时候依然符合 else 所以合并一下*///要回收了 拿析构函数清理一下 obj-~T();* (void**)obj _freeList;_freeList obj;} 2.2 定长内存池——分割内存 templateclass T class ObjectPool { public:T* New(){//当剩余的字节数小于需要的字节数就重新申请一个新的大空间T* obj nullptr;//优先使用换回来的内存块对象重复利用if (_freeList){void* next *(void**)_freeList;//_freeList的前指针大小个字节 解引用为nextobj (T*)_freeList;_freeList next;}else{if (_remainBytes sizeof(T)){_remainBytes 128 * 1024;_memory (char*)malloc(128 * 1024);if (_memory nullptr){throw std::bad_alloc();}}obj (T*)_memory;_memory sizeof(T);_remainBytes - sizeof(T);}//空间有了 初始化一下 定位newnew(obj)T;return obj;}//归还内存void Delete(T* obj){} private:char* _memory nullptr;//指向大块内存的指针size_t _remainBytes 0;//大块内存存在切分过程中的剩余字节数void* _freeList nullptr;//还回来的内存块由_freeList指针指向的链表链接起来 }; 2.3 测试代码及结果 struct TreeNode {int _val;TreeNode* _left;TreeNode* _right;TreeNode():_val(0), _left(nullptr), _right(nullptr){} };void TestObjectPool() {// 申请释放的轮次const size_t Rounds 5;// 每轮申请释放多少次const size_t N 100000;std::vectorTreeNode* v1;v1.reserve(N);size_t begin1 clock();//记录使用new和delete场景下的开始时间for (size_t j 0; j Rounds; j){for (int i 0; i N; i){v1.push_back(new TreeNode);}for (int i 0; i N; i){delete v1[i];}v1.clear();}size_t end1 clock();std::vectorTreeNode* v2;v2.reserve(N);ObjectPoolTreeNode TNPool;size_t begin2 clock();//记录使用定长内存池的New和Delete的开始时间for (size_t j 0; j Rounds; j){for (int i 0; i N; i){v2.push_back(TNPool.New());}for (int i 0; i N; i){TNPool.Delete(v2[i]);}v2.clear();}size_t end2 clock();cout new cost time: end1 - begin1 endl;cout object pool cost time: end2 - begin2 endl; }
http://www.dnsts.com.cn/news/225606.html

相关文章:

  • 怎么学做淘宝电商网站企业宣传册模板设计素材
  • 自己做网站可以上传软件下载怎样了解网站建设是否专业
  • 黔东南网站建设开发一个网站
  • 长尾关键词爱站ie建设企业网站进去无法显示
  • 黄页88网怎么推广沧州网站改版优化
  • 如何用爬虫做网站监控网站建设就业前景
  • php语言 网站建设中国进出口贸易网
  • 做动画网站去哪采集地方门户网站盈利
  • 喜欢做网站的行业建网站的公司服务
  • 顾村网站建设安卓 wordpress 源码
  • 极简个人网站模板三星单片机开发网站
  • 手机验证登录网站开发红酒公司网站源码
  • 自己做的网站怎么接支付宝wordpress实名
  • 做微信公众号的网站有哪些网站建设有哪几种
  • wordpress站群作用企业还有人做网站么
  • 网站推广怎么优化展示营销型网站
  • 北京做网站哪家公司好优化优化
  • 物流网站做那个好网络营销顾问培训
  • 免费发布网站建设的平台泰兴市城乡建设管理局网站
  • 广东建网站公司泉州建站费用
  • 网站建设怎么做?衡水网站制作费用
  • 海外医疗网站建设团队拓展活动
  • 宣传图制作网站如何利用网络进行推广和宣传
  • 深圳营销型网站公司电话wordpress 添加
  • 网站整体色彩的建设石家庄发布最新公告
  • 我谁知道在哪里可以找人帮忙做网站做ps合成的网站
  • 长沙宁乡建设网站wordpress商城模板好用吗
  • 网站开发与管理的专业描述有哪些网站做的比较好
  • 做网站必须要有的素材软文营销经典案例
  • 重庆高考征集志愿网站网站顶部图片素材