C 中STL地图的自定义分配器

custom allocator for stl map in c++

本文关键字:自定义 分配器 地图 STL      更新时间:2023-10-16

我想为多件事创建一个自定义分配器,该分配将分配共享内存中的元素。我碰到boost.interprocess,但发现实现实现非常复杂。还有其他解决方法吗?

我不会在这里提供任何实现,而是为您提供一些指示。如果您的共享内存抽象或区域,例如从adress void* shmemaddr开始,如果您决定使用共享内存的stl容器,需要做的是使容器分配内存,从Shmemaddr开始,然后再进一步,直到可以在共享池中分配内存为止。您可以使用任何分配策略,例如使用Malloc或New Spemeent实施该策略。此外,要使您的容器使用您的分配器,您需要提供分配器作为模板参数,对于Multimap,它将是Multimap :: Allocator_Type类alloc =分配器>作为第四个模板参数,在较少的比较函数之后,例如,如果将存储在多胶合对中,请兼作键,键,价值对,则可能是这样的东西

multimap<int,double,less<int>,CustomAlloc<pair<int,double>>>

现在,您的自定义分配器需要满足封装特定Lowlevel内存管理的分配概念,尤其是如果共享内存是要分配的资源,则需要在多线程的环境中安排正确的内存分配。这意味着,首先,您需要一些结构才能证明使用的记忆。例如,它可能是一些链接的数据结构,类似的实现非常普遍,因此您需要保持该结构的不变性一致。这意味着,如果您需要在succesfull分配或交易分配或交易之后需要更新您的书本保存结构,则需要进行原子化,因此,线程可能会尝试分配内存的内存,请参阅CustomAllocator分配作业之前的状态中的结构开始或分配工作完成后。例如,您的首选可能是使用Mutex保护数据,避免比赛并保持不变性。这只是方向,考虑到自己的分配者并不是很难,我希望这将有所帮助。