这有一些常见问题解答.
tcmalloc
是由google
公司早期开发的内存分配器, 可以轻松与大部分项目配合使用.
我们可以通过以下方式来使用
通过动态链接tcmalloc
/tcmalloc_minimal
, 这种方式适用于大部分系统(包括:Windows
)
通过设置LD_PRELOAD=/path/libtcmalloc.so
, 这种方式适用于大部分Unix-Like系统.
您可以在性能指标文章里获得信息, 也可以通过从网上分享的文章来了解更多.
这里简单描述一下优势:
拥有线程本地缓存.
使用更低开销的锁.
降低系统调用频率.
自适应算法减少内存浪费.
合并归还算法减少内存碎片.
对于 将系统中可用的内存空间分配给程序或进程以供其使用 的行为, 我们将其称为: 申请内存. 而 “将之前已申请但不再使用的内存块交还” 的行为, 我们将其称为: 释放内存
如果您使用不同的编程语言, 则会有不同的使用:
实现 Zero-Copy
或 file-mapping
时可以使用mmap/munmap等函数.
在栈上临时申请非固定大小的内存可以使用alloca等函数.
可以! 没有使用tcmalloc
的程序在动态地分配和释放内存时, 会导致内存中出现不连续的小块空闲内存. 这些小块空闲内存如果不能被有效地利用就会形成内存碎片.
而tcmalloc
利用合理的内存池和分配策略能减少频繁的向系统进行小内存的分配, 在缓解内存碎片产生的同时减少了大量系统调用, 因此可以认为提高了整体的内存申请效率.
检查您使用的动态库是否使用CMAKE
构建且处于非Release
或RelWithDebugInfo
模式.
当前系统、内核是否提供完整的优化特性, 对于有限支持的环境应该进行完整的测试用例覆盖后再决定是否使用.