• aoi


    云风的:http://blog.codingnow.com/2012/03/dev_note_13.html

    内存碎片优化:tcmalloc  

    性能工具:profile

    内存泄漏工具:valgrind(valgrind --leak-check=full ./test),gdb(gdb ./test core.1999 -> where)

    内存泄露检测
    使用tcmalloc的程序,用valgrind无法检测内存泄露,可以使用google-perftools提供的heap checker
    使用方法:    

    which pprof
      /usr/local/bin/pprof
    export PPROF_PATH=/usr/local/bin/pprof 
    HEAPCHECK=normal  LD_PRELOAD="/usr/local/lib/libtcmalloc.so" ./test 


    export  HEAPCHECK=TYPE
    TYPE可以为:minimal、normal、strict、draconian

    更细节可以参考:http://google-perftools.googlecode.com/svn/trunk/doc/tcmalloc.html

    tcmalloc在不需要增加任何开发代价的情况下,就可以使得程序有可能在性能上有一个飞跃,so, try it~

    使用Tcmalloc:
    下载编译google-perftool(performance tool,includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.)
    将tcmalloc通过“-ltcmalloc”链接器标志接入模块

    tcmalloc概述
    tcmalloc将内存请求分为两类,大对象请求和小对象请求,大对象为>=32K的对象。|
    tcmalloc会为每个线程分配线程局部缓冲
    对于小对象请求,可以直接从线程局部缓冲区获取,如果线程局部缓冲区没有空闲内存,则从central heap中一次性获取一连串小对象。
    tcmalloc对于小内存,按8的整数次倍分配,对于大内存,按4K的整数次倍分配。
    这样做有两个好处,一是分配的时候比较快。二是短期的收益比较大,分配的小内存至多浪费7个字节,大内存则4K
    当某个线程缓存当缓存中所有对象的总共大小超过2MB的时候,会对他进行垃圾收集。垃圾收集阈值会自动根据线程数量的增加而减少,这样就不会因为程序有大量线程而过度浪费内存。

  • 相关阅读:
    HDU2546(01背包)
    HDU4283(KB22-G)
    POJ1651(KB-E)
    POJ2955(KB22-C 区间DP)
    POJ3264(KB7-G RMQ)
    POJ3468(KB7-C 线段树)
    POJ3616(KB12-R dp)
    Ubuntu16.04安装opencv for python/c++
    华中农业大学第五届程序设计大赛网络同步赛-L
    华中农业大学第五届程序设计大赛网络同步赛-K
  • 原文地址:https://www.cnblogs.com/ghost240/p/3429762.html
Copyright © 2020-2023  润新知