美文网首页
tcmalloc 比较glibc

tcmalloc 比较glibc

作者: 有你我就不孤单 | 来源:发表于2018-12-04 18:12 被阅读0次

    使用了thread cache,小块的内存分配都可以从cache中分配。多线程分配内存的情况下,可以减少锁竞争。

    tcmalloc官方文档见:

    https://gperftools.github.io/gperftools/tcmalloc.html

    tcmalloc可以替换大多数系统、不同编译器环境下的内存分配函数(malloc/free/new/delete),针对不同的编译器和操作系统,替换的方式有所不同。

    对于GCC编译的glibc的替换,则采用GNU C中提供的__attribute__(alias)别名机制,定义和glibc中实际调用的函数同名的函数,并将其声明为tcmalloc对应函数的别名。gcc glibc中内存分配的函数为弱符号(week symbol),在链接时便顺利被tcmalloc替代。

    一般来说,通常的经验是

    (1)glibc管理的内存绝大多数情况不会释放。

        因此编程时如果是小内存分配要尽快使用,尽快用完,尽快释放,不要停留,否则一直摞着,线性地址后面的就形成了空洞。

    (2)如果是想内存总在控制中,可以分配大内存,自行管理释放和分配。不用的时候可以释放地很干净

    (3)不要分配很小的内存比如几个字节,因为一次malloc至少分配16个字节,如果每次分配都很小,就太亏了。

    (4)降低M_MMAP_THRESHOLD,可以让更多的分配走mmap,避免brk得总总问题,特别是64位机器的情况下。

    (5)降低M_TRIM_THRESOLD,让堆顶的空闲内存更容易释放。

    相关文章

      网友评论

          本文标题:tcmalloc 比较glibc

          本文链接:https://www.haomeiwen.com/subject/kourzftx.html