-
Notifications
You must be signed in to change notification settings - Fork 385
pool_alloc.h
mutouyun edited this page Dec 9, 2025
·
1 revision
#include "libipc/pool_alloc.h"
定义内存池分配器,用于高效的内存分配和对象构造/析构。
ipc::mem
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使用内部内存池,适合频繁的小块内存分配 -
construct和destruct支持数组类型 - 分配和释放必须配对,且大小必须匹配
- 线程安全,可以在多线程环境中使用
-
ipc::shm::handle- 共享内存,经常与pool_alloc配合使用 - namespace ipc - ipc命名空间