Skip to content

Boost 内存管理

SmartPtr

boost::shared_ptrboost::weak_ptrboost::scoped_ptrboost::intrusive_ptr——这些是 C++11 智能指针的直接前身。

intrusive_ptr

shared_ptr 不同,intrusive_ptr 要求被管理对象自身维护引用计数:

cpp
struct MyObject {
    std::atomic<int> refcount{0};
    // ...
};

void intrusive_ptr_add_ref(MyObject* p) { p->refcount.fetch_add(1); }
void intrusive_ptr_release(MyObject* p) {
    if (p->refcount.fetch_sub(1) == 1) delete p;
}

boost::intrusive_ptr<MyObject> ptr(new MyObject);

优势:不需要独立的控制块分配(比 shared_ptr 少一次 malloc)。

Pool:内存池

Boost.Pool 提供两种池分配器:

  • pool<>:固定大小块的内存池。分配/释放 O(1),无碎片。
  • object_pool<T>:对象池,批量构造/析构同类型对象。
cpp
boost::pool<> alloc(sizeof(int));  // 4 字节块的内存池
int* p = static_cast<int*>(alloc.malloc());  // 从池中分配
alloc.free(p);  // 归还到池中

Align:对齐内存

boost::alignment::aligned_alloc 提供对齐内存分配——在 C++17 std::aligned_alloc 之前的跨平台方案。

基于 MIT 许可发布