C++ 标准模板库(STL)中的空间分配器是用于管理动态分配内存的抽象类。它提供了一种通用的机制,用于在 STL 容器中分配和释放内存。空间分配器的主要目标是提供一种可定制的内存管理策略,以适应不同的需求。
例如,可以实现自定义的分配器来优化内存使用、支持特定的内存池或提供垃圾回收功能。在 STL 中,有两个预定义的空间分配器:std::allocator和std::allocator_traits。
std::allocator是一个通用的分配器类,它提供了最基本的内存分配和释放功能。它使用 C++ 的new和delete操作符来分配和释放内存。
std::allocator_traits是一个模板类,它提供了一些类型特质和函数,用于操作不同类型的分配器。它定义了一些常用的操作,如分配内存、释放内存、重分配内存等。
如果需要使用自定义的空间分配器,可以从std::allocator派生一个类,并实现所需的分配和释放函数。然后,可以将自定义分配器与 STL 容器一起使用,通过模板参数传递给容器。
下面是个demo
#include
#include
// 自定义分配器类
template
class CustomAllocator : public std::allocator {
public:
template
struct rebind {
typedef CustomAllocator other;
};
public:
// 分配内存的函数
void* allocate(size_t bytes) {
std::cout << "CustomAllocator::allocate()" << std::endl;
return std::malloc(bytes);
}
// 释放内存的函数
void deallocate(void* ptr, size_t bytes) {
std::cout << "CustomAllocator::deallocate()" << std::endl;
std::free(ptr);
}
};
int main() {
std::vector> vec;
// 向向量中添加元素
vec.push_back(10);
vec.push_back(20);
vec.push_back(30);
// 打印向量的元素
for (int i : vec) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
g++ -o allocatorTest -g allocatorTest.cpp -fpermissive
./allocatorTest
输出
CustomAllocator::allocate()
CustomAllocator::allocate()
CustomAllocator::deallocate()
CustomAllocator::allocate()
CustomAllocator::deallocate()
10 20 30
CustomAllocator::deallocate()
在上述示例中,我们定义了一个自定义的分配器类CustomAllocator,并实现了allocate和deallocate函数来管理内存分配和释放。然后,我们使用这个自定义分配器来实例化一个std::vector
本文暂时没有评论,来添加一个吧(●'◡'●)