gpt4 book ai didi

c++ - STL 的 TCMalloc 分配器

转载 作者:太空狗 更新时间:2023-10-29 20:06:57 28 4
gpt4 key购买 nike

我想将 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 吗?

最佳答案

STL_Allocator TCMalloc 中的类是一个适配器类:你使用提供 Allocate 的(更简单的)Alloc 类实例化它和 Free您引用的评论中的方法,并且-瞧-您会得到一个实现所有要求的类 STL allocator (点击链接获取介绍性文章什么是 STL 分配器以及如何实现)。

使用示例包括 simple_allocNull Set起草于 another answer , 但在 TCMalloc 中有一个例子资料来源:MyAllocator文件中的类 memory_region_map.h .

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

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

关于c++ - STL 的 TCMalloc 分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5292994/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com