Z
ZHANK
编程在线教程C++ 教程分配器与内存池
内存管理进阶

分配器与内存池

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 自动释放所有内存