封装C++内存优化管理器,提升性能记录

在项目中可能存在这样一种情况,某些时刻需要大量的分配内存,并且是若干个且不是一致性分配的,如我们显示复合文档中的一些Path对象,如果是我们的代码不做任何处理,那么在进行这样的操作时,可能非常的慢或者直接Crash掉。

这时候我们要考虑定义自己的内存管理器了,首先让自己用的所用对象都继承一个公共的基类,BaseObject,然后需要重写里面的New操作运算符,子类便可以正常的使用了。分配的内存一般有链表型,和固定型。这里要注意的是,由申请重写的自定义管理器分配的内存,就要用自定义管理器的释放方法释放。由一般的申请的内存,就用一般的释放方法。要配套使用,不能混乱调用。

常见的内存管理器:MemoryManger,FixMemoryManger,GrowOnlyPool,Python内存管理器。然后涉及到GC,PRNG地址映射空间,和一些扫描算法。

这些内存管理器提升性能的本质就是:地址映射空间设置的合理,分配的紧密,使用的紧密,用密度来换空间。例如打开一个含有很多Path对象的复合文件,如果是按照系统的分配法则,可能分配的不是那么有规律,并且系统不知道要分配数量非常大的,这就导致了严重的内存碎片,倒不如一些性分配一些大的,然后在自己的分配中按照特定方式去计算查找要分配的数据地址。这就有点像是教授做的那个瓶子中塞物品的实验,看似满的瓶子 还是可以放一些小的物品。虽说巧妇难为无米之炊,但是精打细算的话,还是会好很多,表现在我们的宏观感受上,就是不会那么卡或者直接异常退出;

借助gFlags工具,来选取不同的内存分配器。

内存处理器应该还有做到碎片的处理Purge,要选取适当的处罚时机和策略进行回收。同时我们在做内存管理和监护时,最好让审计代码的同事,对整个工程进行跑起来分析,分析是哪个文件的哪一行,然后进行分析;包括我们的Core层代码都要进行这样的分析;千里之堤,毁于蚁穴,把这些小的细节考虑到,才会使得产品更加可靠有保证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值