我想将TCMalloc与STL容器一起使用,因此我需要使用TCMalloc构建的分配器(如带有TBB malloc的tbb_allocator)。我找不到任何TCMalloc documentation(如果称为文档)。因此,我开始探索头文件并找到一个名为STL_Allocator的类。但是我不清楚。来自STL_allocator.h的报价:

// Generic allocator class for STL objects
// that uses a given type-less allocator Alloc, which must provide:
//   static void* Alloc::Allocate(size_t size);
//   static void Alloc::Free(void* ptr, size_t size);
//
// STL_Allocator<T, MyAlloc> provides the same thread-safety
// guarantees as MyAlloc.
//
// Usage example:
//   set<T, less<T>, STL_Allocator<T, MyAlloc> > my_set;
// CAVEAT: Parts of the code below are probably specific
//         to the STL version(s) we are using.
//         The code is simply lifted from what std::allocator<> provides.

STL_Allocator模板类的定义为:
template <typename T, class Alloc>
class STL_Allocator {
//...
}

我不知道Alloc参数是什么。我是否应该为某些内存分配函数编写包装器类?有人用过TCMalloc吗?

最佳答案

TCMalloc中的STL_Allocator类是一个适配器类:您
使用(简单的)Alloc类实例化它,该类提供AllocateFree方法,如您引用的注释中所示,然后-voila-您会得到一个
类实现了所有要求
STL allocator(点击以下链接的介绍性文章
什么是STL分配器以及如何实现)。

使用的示例包括Null Setsimple_alloc
another answer中起草,但在TCMalloc中有一个示例
来源:memory_region_map.h文件中的MyAllocator类。

但是请注意,定义STL_Allocator的头文件是一个
内部组件,不作为公共(public)组件安装
TCMalloc库的文件。

也就是说,请注意,无需使用自定义分配器
受益于C++代码中的TCMalloc:如果标准分配器使用
在某个时候使用malloc(),您只需要预加载或链接TCMalloc
就是这样。如果使用的是GNU C++编译器,则可以 #include<ext/malloc_allocator.h> 使用简单包装的分配器
malloc()没有额外的逻辑。

09-07 10:47