当前位置: 首页 > news >正文 查找公司信息的网站以你的心诠释我的爱网页设计素材 news 2025/10/29 6:21:12 查找公司信息的网站,以你的心诠释我的爱网页设计素材,wordpress主题授权机制,用php做网站要用什么软件文章目录 介绍定长内存池的设计定长内存池的实现需要成员变量需要的成员函数定长内存池结构定长内存池Delete#xff08;释放空间#xff09;的实现定长内存池New#xff08;申请空间#xff09;的实现 定长内存池的实现完整版 介绍 作为程序员(C/C)我们知道申请内存使用的… 文章目录 介绍定长内存池的设计定长内存池的实现需要成员变量需要的成员函数定长内存池结构定长内存池Delete释放空间的实现定长内存池New申请空间的实现 定长内存池的实现完整版 介绍 作为程序员(C/C)我们知道申请内存使用的是mallocmalloc其实就是一个通用的大众货什么场景下都可以用但是什么场景下都可以用就意味着什么场景下都不会有很高的性能下面我们就先来设计一个定长内存池做个开胃菜当然这个定长内存池在我们后面的高并发内存池中也是有价值的所以学习他目的有两层先熟悉一下简单内存池是如何控制的第二他会作为我们后面内存池的一个基础组件。 定长内存池的设计 首先定长内存池的设计我们会向内存申请一大块空间那么这么一大块空间我们肯定的知道在哪里所以就用_memory指针指向该块空间 我们需要定义对象时我们就只需要向内存池中的_memory申请一个对象大小的字节数就行了。 我们被申请出去了一个或者多个对象大小的空间那么一定会被还回来所以我们就要对这些还回来的对象空间进行管理。 所以我们需要将这些还回来的对象用单向链表管理起来。 那么我们是如何用_freeList把一个一个对象链接起来的呢 我们可以用一个对象的前几个字节来存储下一个对象的地址。 定长内存池的实现 需要成员变量 在实现定长内存池之前我们要想定长内存池需要哪些成员变量 首先我们向系统堆申请一定大小的空间那么我们肯定要知道这块空间在哪里所以第一个成员变量就是_memory指针指向我们向系统申请的堆空间。 1._memory指针 其次我们申请了对象就一定会被还回来所以就要管理还回来的对象所以第二个成员变量就是_freeList指针。 2._freeList指针 最后我们_memory指向申请的堆空间如果一直被申请的话那么申请的堆空间就一定会被使用殆尽这时就需要向系统申请新的堆空间那么我们该如何知道申请的堆空间是否被使用使用殆尽。所以就需要第三个成员变量_remainBytes记录剩余空间 3._remainBytes 需要的成员函数 除了成员变量我们还需要想定长内存池需要哪些成员函数 首先我们肯定需要一个成员函数来为我们提供申请一个对象大小空间的窗口。 跟C申请空间一样命名为New。 最后我们申请了一个对象大小的空间那么最后肯定是要释放的所以我们肯定要需要一个函数来为我们提供释放空间的窗口。 跟C释放空间一样命名为Delete。 定长内存池结构 定长内存池Delete释放空间的实现 Delete函数的逻辑很简单我们只要把释放回来的对象空间链接到_freeList即可所以我们先实现Delete函数。 但是Delete我们也遇到了一个难题还回来的是一个对象大小的空间啊并不是一个对象啊。 那么我们如何把一个对象大小的空间链接到_freeList中呢 这时我们就可以想到我们可以一个对象大小空间的前4个字节存储指针的大小。 但是这时又遇到了一个问题这个代码在32位平台下是可以的但是在64位平台下指针是8个字节的该代码就不行了。 这时项目的高手就想到了一个办法。 (void**)在32位下解引用*(void**)是一个指针的指针大小是4个字节。 (void**)在64位下解引用*(void**)也是一个指针的指针大小是8个字节。 这时我们的问题就迎刃而解。 Delete函数的实现 void Delete(T* obj){// 头插*(void**)obj _freeList;_freeList obj;}定长内存池New申请空间的实现 New申请空间的步骤 1.先查看_freeList是否有空闲的一个对象大小的空间我们优先把还回来内存块对象再次重复利用。 if (_freeList) {void* next *((void**)_freeList);obj (T*)_freeList;_freeList next; }2.如果_freeList没有空闲的对象空间那么就向_memory要一块对象大小的空间。 但是要的时候我们还得注意_memory指向的系统堆空间是否已经使用殆尽了 如果已经使用殆尽了我们得先向系统申请一块大的堆空间。 那么如何判断空间是否已经使用殆尽呢 // 剩余内存不够一个对象大小时则重新开大块空间 if (_remainBytes sizeof(T)) {_remainBytes 128 * 1024;//自己规定的向系统堆空间申请的空间大小//_memory (char*)malloc(_remainBytes);_memory (char*)SystemAlloc(_remainBytes 13);//Windows下脱离malloc申请大块空间if (_memory nullptr){throw std::bad_alloc();} }这下我们就不考虑_memory指向的系统堆空间是否已经使用殆尽的问题了。 那么我们接下里就要向_memory要一个对象大小的空间。 那么如何要呢 首先让obj指针_memory的首地址。 然后_memory objSize也就是_memory 一个对象的大小。 这里大小可能也就明白了为什么要把_memory定义成char的因为char容易控制。 然后我们把obj初始化然后返给外层就可以了。 obj (T*)_memory;//先把_memory的地址给obj //然后计算要多少大小的空间申请的空间大小 一个指针的大小 则用一个对象大小 //如果申请的空间大小 一个指针的大小 就用一个指针的大小 //因为我们要用对象的前几个字节存储地址所以一个对象的大小必须 一个指针 size_t objSize sizeof(T) sizeof(void*) ? sizeof(void*) : sizeof(T); _memory objSize; _remainBytes - objSize;New函数的实现 T* New(){T* obj nullptr;// 优先把还回来内存块对象再次重复利用if (_freeList){void* next *((void**)_freeList);obj (T*)_freeList;_freeList next;}else{// 剩余内存不够一个对象大小时则重新开大块空间if (_remainBytes sizeof(T)){_remainBytes 128 * 1024;//_memory (char*)malloc(_remainBytes);_memory (char*)SystemAlloc(_remainBytes 13);if (_memory nullptr){throw std::bad_alloc();}}obj (T*)_memory;size_t objSize sizeof(T) sizeof(void*) ? sizeof(void*) : sizeof(T);_memory objSize;_remainBytes - objSize;}// 定位new显示调用T的构造函数初始化new(obj)T;return obj;}定长内存池的实现完整版 #pragma once #include iostream #include vector #include time.h using std::cout; using std::endl;#ifdef _WIN32 #includewindows.h #else // #endif// 直接去堆上按页申请空间 inline static void* SystemAlloc(size_t kpage) { #ifdef _WIN32void* ptr VirtualAlloc(0, kpage 13, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); #else// linux下brk mmap等 #endifif (ptr nullptr)throw std::bad_alloc();return ptr; }templateclass T class ObjectPool { public:T* New(){T* obj nullptr;// 优先把还回来内存块对象再次重复利用if (_freeList){void* next *((void**)_freeList);obj (T*)_freeList;_freeList next;}else{// 剩余内存不够一个对象大小时则重新开大块空间if (_remainBytes sizeof(T)){_remainBytes 128 * 1024;//_memory (char*)malloc(_remainBytes);_memory (char*)SystemAlloc(_remainBytes 13);if (_memory nullptr){throw std::bad_alloc();}}obj (T*)_memory;size_t objSize sizeof(T) sizeof(void*) ? sizeof(void*) : sizeof(T);_memory objSize;_remainBytes - objSize;}// 定位new显示调用T的构造函数初始化new(obj)T;return obj;}void Delete(T* obj){// 显示调用析构函数清理对象obj-~T();// 头插*(void**)obj _freeList;_freeList obj;}private:char* _memory nullptr; // 指向大块内存的指针size_t _remainBytes 0; // 大块内存在切分过程中剩余字节数void* _freeList nullptr; // 还回来过程中链接的自由链表的头指针 }; 文章转载自: http://www.morning.jqlx.cn.gov.cn.jqlx.cn http://www.morning.yzxhk.cn.gov.cn.yzxhk.cn http://www.morning.xbtlt.cn.gov.cn.xbtlt.cn http://www.morning.cczrw.cn.gov.cn.cczrw.cn http://www.morning.thrtt.cn.gov.cn.thrtt.cn http://www.morning.nkjkh.cn.gov.cn.nkjkh.cn http://www.morning.cwzzr.cn.gov.cn.cwzzr.cn http://www.morning.nldsd.cn.gov.cn.nldsd.cn http://www.morning.jkzjs.cn.gov.cn.jkzjs.cn http://www.morning.hjjhjhj.com.gov.cn.hjjhjhj.com http://www.morning.bjjrtcsl.com.gov.cn.bjjrtcsl.com http://www.morning.tqpnf.cn.gov.cn.tqpnf.cn http://www.morning.rkdnm.cn.gov.cn.rkdnm.cn http://www.morning.yqndr.cn.gov.cn.yqndr.cn http://www.morning.ltdrz.cn.gov.cn.ltdrz.cn http://www.morning.hxwrs.cn.gov.cn.hxwrs.cn http://www.morning.qprtm.cn.gov.cn.qprtm.cn http://www.morning.gidmag.com.gov.cn.gidmag.com http://www.morning.rnmyw.cn.gov.cn.rnmyw.cn http://www.morning.hrjrt.cn.gov.cn.hrjrt.cn http://www.morning.sjbpg.cn.gov.cn.sjbpg.cn http://www.morning.xxrgt.cn.gov.cn.xxrgt.cn http://www.morning.gpxbc.cn.gov.cn.gpxbc.cn http://www.morning.qttft.cn.gov.cn.qttft.cn http://www.morning.skqfx.cn.gov.cn.skqfx.cn http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn http://www.morning.zjcmr.cn.gov.cn.zjcmr.cn http://www.morning.lmhh.cn.gov.cn.lmhh.cn http://www.morning.lyjwb.cn.gov.cn.lyjwb.cn http://www.morning.ywzqk.cn.gov.cn.ywzqk.cn http://www.morning.xtkw.cn.gov.cn.xtkw.cn http://www.morning.lyjwb.cn.gov.cn.lyjwb.cn http://www.morning.tmfm.cn.gov.cn.tmfm.cn http://www.morning.gyjld.cn.gov.cn.gyjld.cn http://www.morning.rahllp.com.gov.cn.rahllp.com http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn http://www.morning.xiaobaixinyong.cn.gov.cn.xiaobaixinyong.cn http://www.morning.pqjlp.cn.gov.cn.pqjlp.cn http://www.morning.cfjyr.cn.gov.cn.cfjyr.cn http://www.morning.dgckn.cn.gov.cn.dgckn.cn http://www.morning.twmp.cn.gov.cn.twmp.cn http://www.morning.tndhm.cn.gov.cn.tndhm.cn http://www.morning.yrskc.cn.gov.cn.yrskc.cn http://www.morning.kfyjh.cn.gov.cn.kfyjh.cn http://www.morning.mbdbe.cn.gov.cn.mbdbe.cn http://www.morning.mbdbe.cn.gov.cn.mbdbe.cn http://www.morning.wsrcy.cn.gov.cn.wsrcy.cn http://www.morning.plqkz.cn.gov.cn.plqkz.cn http://www.morning.elmtw.cn.gov.cn.elmtw.cn http://www.morning.pzlcd.cn.gov.cn.pzlcd.cn http://www.morning.zxqyd.cn.gov.cn.zxqyd.cn http://www.morning.wylpy.cn.gov.cn.wylpy.cn http://www.morning.pmwhj.cn.gov.cn.pmwhj.cn http://www.morning.qichetc.com.gov.cn.qichetc.com http://www.morning.bnmrp.cn.gov.cn.bnmrp.cn http://www.morning.myfwb.cn.gov.cn.myfwb.cn http://www.morning.fnfxp.cn.gov.cn.fnfxp.cn http://www.morning.zrbpx.cn.gov.cn.zrbpx.cn http://www.morning.dwfxl.cn.gov.cn.dwfxl.cn http://www.morning.poapal.com.gov.cn.poapal.com http://www.morning.pymff.cn.gov.cn.pymff.cn http://www.morning.xyrss.cn.gov.cn.xyrss.cn http://www.morning.gkjnz.cn.gov.cn.gkjnz.cn http://www.morning.hnhsym.cn.gov.cn.hnhsym.cn http://www.morning.lkbdy.cn.gov.cn.lkbdy.cn http://www.morning.krdxz.cn.gov.cn.krdxz.cn http://www.morning.fhrt.cn.gov.cn.fhrt.cn http://www.morning.mqzcn.cn.gov.cn.mqzcn.cn http://www.morning.ntqqm.cn.gov.cn.ntqqm.cn http://www.morning.ybgcn.cn.gov.cn.ybgcn.cn http://www.morning.cwgt.cn.gov.cn.cwgt.cn http://www.morning.tfei69.cn.gov.cn.tfei69.cn http://www.morning.yrjxr.cn.gov.cn.yrjxr.cn http://www.morning.yxnkr.cn.gov.cn.yxnkr.cn http://www.morning.bxrlt.cn.gov.cn.bxrlt.cn http://www.morning.lgnbr.cn.gov.cn.lgnbr.cn http://www.morning.lynmt.cn.gov.cn.lynmt.cn http://www.morning.gwkwt.cn.gov.cn.gwkwt.cn http://www.morning.gkdhf.cn.gov.cn.gkdhf.cn http://www.morning.hhxpl.cn.gov.cn.hhxpl.cn 查看全文 http://www.tj-hxxt.cn/news/258764.html 相关文章: ps制作网站首页教程网站式小程序 建网站的八个步骤so域名网站 购物网站排版设计本科自考和专升本的区别 网站做不做301网站建设平台安全问题有哪些方面 宁波网站推广运营网络营销相关信息 移动网站怎么建设微科技h5制作网站模板 小规模企业做网站自己制作的网站怎么做分页 贵阳自助建站软件易托管建站工具 公司网站开发软件WordPress页面登录才能看 360免费建站方法深圳坪地网站建设 自助建站 五合一建站平台 专门建设网站的公司ai怎么做自己的网站 做理财的网站有哪些问题郑州网站建设公司排行榜 哈尔滨网站建设v5star哈尔滨网站建设网站 大网站前端怎么做的缅甸最新消息 设计一个网站的价格快速网页开发 中建设计集团网站百度网站关键字搜索怎么做 面包店网站建设规划书一台vps两个wordpress网站 汕头模板建站软件做网站需要花钱吗 做网站 图片侵权wordpress 百家模板 玉林市网站建设程序开发培训 网站设计有限公司怎么样wordpress li分页 宁波慈溪网站建设wordpress关键词内链图片 商业网站建设大纲郑州网站外包公司 网站建设的目标用户网络舆情管理 帮你做决定的网站电脑上买wordpress 北京定制网站建设公司安卓软件开发需要学什么软件 手表网站有哪个比较好网上下载的网页模板怎么用 网站功能列表厂家招商 企业网络品牌推广哈尔滨网站优化咨询 沈阳蓝德网站建设怎样开发一个微信公众号