10 项目总结

        经过基数树优化后的高并发内存池的性能获得了质的提升:

Debug模式下:

 Release模式下:

         至此,本高并发内存池项目就完成了。本项目更接近于一个练手项目,使得我对于内存空间的管理有了一个深刻地理解,而不是要造一个完整地轮子。因此本ConcurrentMemoryPool的代码量其实连tcmalloc源码的十分之一都不到,原因在于ConcurrentMemoryPool没有针对于内存越界、重复释放等的检查,还有分配和回收策略也不够精细等。

比如:

        TCMalloc提供了一个TCMallocGuardedSampling类,它可以在分配内存时检查是否有越界的风险,并在发现越界时抛出异常。这个类使用了AddressSanitizer的技术,即在每个内存块的前后添加一些保护区域,并在这些区域中填充一些特殊的值。如果这些值被修改了,说明有越界的操作发生了。

        TCMalloc还提供了一个TCMallocDebug类,它可以在分配和释放内存时进行一些额外的检查,例如检查是否有重复释放、内存泄漏、内存损坏等问题。这个类使用了HeapChecker的技术,即在每个内存块中添加一些元数据,并维护一个全局的内存块列表,以此来检查内存块的状态。

        但是ConcurrentMemoryPool对于tcmalloc主体框架的精髓还是把握到了的,已经足矣。

       附:

        可以用自己实现的并发内存池来替换系统默认的内存分配和释放函数,即malloc和free。这样做能够提高内存管理的效率和性能。

        不同的操作系统有不同的方法来实现这种替换。在基于unix的系统上,有一种方法叫做weak alias,它可以让一个函数名指向另一个函数的实现。例如,如果我们定义了一个函数tc_malloc,然后用weak alias把malloc指向tc_malloc,那么当我们调用malloc时,实际上执行的是tc_malloc的代码。这样就实现了替换。

        weak alias是一种gcc编译器支持的特性,它可以用attribute来指定。attribute是一种给函数或变量添加额外信息的语法。例如,attribute ((alias (tc_malloc)))就表示这个函数或变量是tc_malloc的别名。

        有些操作系统不支持weak alias(比如windows),需要用另一种方法叫做hook(钩子函数)。hook是一种在运行时修改程序行为的技术,它可以拦截或修改函数调用、系统调用、消息、事件等。例如,我们可以用hook把malloc的地址改成tc_malloc的地址,这样当我们调用malloc时,也会跳转到tc_malloc的代码。这样也实现了替换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值