2011-03-13 95 views
3

我想使用TCMalloc和STL容器,所以我需要一个使用TCMalloc构建的分配器(如tbb_allocator和TBB malloc)。我找不到任何东西TCMalloc documentation(如果它被称为文档)。所以我开始探索头文件并找到一个名为STL_Allocator的类。但有些事情我不清楚。从stl_allocator.h报价:STL的TCMalloc分配器

// 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?

回答

1

我不知道它是否会起作用,但试试这个简单的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); 
    } 
} 
6

STL_Allocator类TCMalloc是一个适配器类:你 一个(简单)的Alloc类,它提供AllocateFree方法在你所引用的注释实例化它,-voila-你会得到一个 类实现了对 STL allocator的所有要求(请参阅关于 的介绍性文章的链接,了解STL分配器以及如何实现它们)。

使用的例子包括simple_allocNull Set 起草another answer,但有在TCMalloc 源的例子:在文件memory_region_map.hMyAllocator类。

但是请注意,该头文件中定义STL_Allocator内部之一,没有安装作为公众的一部分包括TCMalloc库 文件。

不过,请注意,没有必要使用自定义分配器 从TCMalloc在C++代码中受益:如果标准分配器在某些时候使用 的malloc(),你只需要预装或TCMalloc链接 就是这样。如果您正在使用GNU C++编译器,则可以使用#include <ext/malloc_allocator.h>来使用分配器,该分配器只包含 malloc()而没有额外的逻辑。

+0

恐怕我正在使用MSVC,并且更换'malloc'是一项艰巨的任务。另外,我需要在应用程序中快速分配两个类,即使其中一个放置新'new(tcmalloc :: alloc())ClassNAme()'也会完美。 – 2011-04-07 21:18:09