Skip to content

pool_alloc.h

mutouyun edited this page Dec 9, 2025 · 1 revision

pool_alloc.h

#include "libipc/pool_alloc.h"

定义内存池分配器,用于高效的内存分配和对象构造/析构。

命名空间

ipc::mem

主要组件

ipc::mem::pool_alloc

class pool_alloc {
public:
    static void* alloc(std::size_t size) noexcept;
    static void  free (void* p, std::size_t size) noexcept;
};

内存池分配器类,提供内存分配和释放接口。

对象构造/析构函数

// 构造对象
template <typename T, typename... P>
T* construct(T* p, P&&... params);

template <typename T, typename... P>
T* construct(void* p, P&&... params);

// 析构对象
template <typename T>
void destruct(T* p);

template <typename T>
void destruct(void* p);

通用分配/释放函数

// 分配原始内存
void* alloc(std::size_t size);

// 分配并构造对象
template <typename T, typename... P>
T* alloc(P&&... params);

// 释放原始内存
void free(void* p, std::size_t size);

// 析构并释放对象
template <typename T>
void free(T* p);

使用示例

原始内存分配

#include "libipc/pool_alloc.h"

// 分配100字节
void* mem = ipc::mem::alloc(100);

// 使用内存...

// 释放
ipc::mem::free(mem, 100);

对象分配

struct MyData {
    int value;
    MyData(int v) : value(v) {}
};

// 分配并构造对象
MyData* obj = ipc::mem::alloc<MyData>(42);

// 使用对象
std::cout << obj->value << std::endl;

// 析构并释放
ipc::mem::free(obj);

在共享内存中构造对象

ipc::shm::handle shm("my_shm", sizeof(MyData));
void* mem = shm.get();

// 在共享内存中构造对象
MyData* obj = ipc::mem::construct<MyData>(mem, 42);

// 使用对象...

// 析构对象(但不释放共享内存)
ipc::mem::destruct(obj);

注意事项

  • pool_alloc使用内部内存池,适合频繁的小块内存分配
  • constructdestruct支持数组类型
  • 分配和释放必须配对,且大小必须匹配
  • 线程安全,可以在多线程环境中使用

相关文档

  • ipc::shm::handle - 共享内存,经常与pool_alloc配合使用
  • namespace ipc - ipc命名空间

Clone this wiki locally