• 使用内存池进行性能优化


    做算法的时候经常会直接接触底层数据结构,并对它们又更高的可靠性和性能要求。

    就像我常说的:Never Repeat Yourself,你永远不可能短时间写出别人久经考验的代码。
    所以在GitHub上找了一下这个用C++ 模板实现的内存池项目。

    如果有兴趣探究内存池的实现方式和结构,请看http://www.codeproject.com/Articles/15527/C-Memory-Pool

    在这里我放上自己Fork的源码Git
    https://github.com/ImNaohaing/MemoryPool

    当然内存池是一种模型而已,具体实现靠的是C++标准库)sgi(Silicon Graphics Computer System,Inc) 版本)中引入的内存配置器(allocator)实现的.

    套官网上的一句话:这场革命来的太晚

    C++官方wiki对内存配置器的描述http://cplusplus.wikidot.com/cn:allocator
    这是分别使用STL默认配置器,作者写的Memory Pool 和 STL::Vector(最常用)的性能比较:
    o_memory_pool.PNG
    o_memory_pool_output.PNG

    测试文件在项目中

     
    
    test.cpp
    测试内容大意为:
        用内存分配器以 250000次/循环 
            向数据结构(默认堆,Memory Pool,std::vector)中添加并删除 int值
    
    

    Results:

    • 可以看到官方的默认实现中内存占用及其不稳定
    • 而Memory Pool事先分配好了内存就很稳定(执行速度也快了)
    • 最差的是std::vector,它执行添加和删除速度很慢,因为vector在增加项目的时候申请内存(malloc),但在删除时不重新划分内存(realloc)而是直接保留,所以虽然执行速度慢,但内存状态相对稳定。
  • 相关阅读:
    WebSocket
    牛人
    ECSHOP+wamp
    数据结构之-----------排序
    DRGS指标计算方法
    Oracle 11g安装教程
    JavaScript入门
    多态
    类的继承
    上传工具类
  • 原文地址:https://www.cnblogs.com/santaizi/p/5252590.html
Copyright © 2020-2023  润新知