分配器与内存池
std::allocator 定制、placement new、简易内存池实现
分配器与内存池
std::allocator 是 STL 容器的默认内存来源。替换分配器可以实现内存池、追踪分配、对齐控制。
学完本章你将: 掌握 allocator 定制、placement new、简易内存池。
默认分配器
cpp
std::allocator<int> alloc;
// 分配 5 个未初始化的 int
int* p = alloc.allocate(5);
// 构造(placement new)
for (int i = 0; i < 5; i++)
alloc.construct(p + i, i * 10);
// 析构 + 释放
for (int i = 0; i < 5; i++)
alloc.destroy(p + i);
alloc.deallocate(p, 5);
placement new
cpp
// 在已分配的内存上构造对象
char buffer[sizeof(int)];
int* p = new (buffer) int(42); // 不分配新内存,在 buffer 上构造
std::cout << *p << "\n"; // 42
p->~int(); // 手动析构(placement new 不会自动析构)
简易内存池
cpp
template <typename T>
class PoolAllocator {
std::vector<T> pool;
public:
T* allocate() {
pool.emplace_back(); // 添加新槽位
return &pool.back(); // 返回地址
}
void deallocate(T*) { /* 批量释放 */ }
};
PoolAllocator<int> pool;
int* a = pool.allocate();
int* b = pool.allocate();
*a = 10; *b = 20;
// 析构时 pool 自动释放所有内存