如何重载运算符new来实现类的快速分配器
How to overload operator new to implement a fast allocator for a class?
1,我已经有了这样的快速分配器:
struct FastAllocator
{
FastAllocator(size_t fixed_size);
void* Allocate(size_t size);
void Free(void* ptr);
};
2,我还有一个类a,需要快速动态分配/删除。因此,我认为在类A的定义中重载operator new
和operator delete
,如下所示:
struct A
{
int buf[1024];
void* operator new(size_t size);
void operator delete(void* ptr);
};
3,由于operator new
和operator delete
都是静态方法,因此,我无法访问this
指针。
4,我的问题是:我应该如何初始化operator new
和operator delete
可以访问的FastAllocator
的实例
您可以为FastAllocator
创建一个类型感知的包装器。
template <typename T>
class FastAllocatorByType {
static FastAllocator & fa () {
static FastAllocator fastalloc(sizeof(T));
return fastalloc;
}
public:
static void* Allocate(size_t size) { return fa().Allocate(size); }
static void Free(void* ptr) { fa().Free(ptr); }
};
然后,new
和delete
重载可以调用到包装器中。
struct A
{
typedef FastAllocatorByType<A> FastAlloc;
int buf[1024];
void* operator new(size_t size) { return FastAlloc::Allocate(size); }
void operator delete(void* ptr) { FastAlloc::Free(ptr); }
};
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- c++ 中的自定义分配器,用于不调用secure_string实现
- 供应商是否将 new 和 malloc 实现为小型对象分配器
- GCC 如何实现 C++ 标准分配器
- 如何实现分配器感知的容器分配
- 要使用 boost::object_pool 实现映射的自定义分配器,如何使用 boost::object_pool 分
- 使用带有自定义对齐分配器实现的最新g++,使用SSE和-O3选项编译时出现非法指令(核心转储)
- 如何重载运算符new来实现类的快速分配器
- 自定义分配器- Microsoft std::map实现对相同的元素进行两次重新分配,GCC工作得很好
- c++内存分配器vptr/new实现
- 有关改进分配器算法实现的建议
- 在LLVM中实现一个寄存器分配器