我想在STL容器中使用TCMalloc,所以我需要一个用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吗?
发布于 2011-04-05 05:56:05
TCMalloc中的STL_Allocator类是一个适配器类:您使用一个(更简单的)TCMalloc类来实例化它,它提供了Allocate和Free方法,就像您引用的注释一样,而且--瞧--您得到了一个实现STL allocator的所有要求的类(请访问关于什么是STL分配器以及如何实现它的介绍性文章的链接)。
使用的示例包括Null Set在another answer中起草的simple_alloc类,但在TCMalloc源代码中有一个示例:文件memory_region_map.h中的MyAllocator类。
但是,请注意,定义STL_Allocator的头文件是一个内部文件,并不是作为TCMalloc库的公共包含文件的一部分安装的。
也就是说,请注意,在C++代码中不需要使用自定义分配器来从TCMalloc中获益:如果标准分配器在某些时候使用了malloc(),您只需要预加载或链接到TCMalloc,仅此而已。如果您使用的是GNU编译器,那么您可以使用#include 来使用一个分配器,该分配器只需包装malloc(),而不需要额外的逻辑。
发布于 2011-03-14 09:30:13
我不知道它是否会工作,但尝试一下这个简单的malloc和free包装。
#include <cstdlib.h>
struct simple_alloc {
static void* Allocate(size_t size){
return malloc(size);
}
static void Free(void* ptr, size_t size){
free(ptr);
}
}https://stackoverflow.com/questions/5292994
复制相似问题